Java 程序设计 第6章

上传人:E**** 文档编号:89389173 上传时间:2019-05-24 格式:PPT 页数:49 大小:1.56MB
返回 下载 相关 举报
Java 程序设计 第6章_第1页
第1页 / 共49页
Java 程序设计 第6章_第2页
第2页 / 共49页
Java 程序设计 第6章_第3页
第3页 / 共49页
Java 程序设计 第6章_第4页
第4页 / 共49页
Java 程序设计 第6章_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《Java 程序设计 第6章》由会员分享,可在线阅读,更多相关《Java 程序设计 第6章(49页珍藏版)》请在金锄头文库上搜索。

1、第6章 Java继承、接口和包,6.1 Java类的继承 6.2 Java类的多态 6.3 抽象类及抽象方法 6.4 final类及final成员 6.5 接口 6.6 包 6.7综合运用实例,6.1 Java类的继承,语法格式: 访问控制符 修饰符 class 子类名 extends 父类名 子类新添加数据成员定义、方法成员定义; ,6.1.1 子类的声明方式,例: class Animal /动物类 public float weight; /重量 public void eat ()/吃 class Mammal extends Animal /哺乳动物类 public int hear

2、tRate; /新添加数据成员heartRate public void breathe() /新添加方法成员breathe ,6.1 Java类的继承,Java类的继承层次结构中,类Object是最顶级的类,它是Java中所有类的根类,它在java.lang包中定义。,6.1 Java类的继承,class Cat extends Mammal/猫类 boolean longhair; /新添加数据成员 public void purr() /新添加方法成员 ,6.1.2 子类对象的创建,【例6-1】 定义父类Father和子类Son,在主类Test中创建各自对象并访问父类对象和子类对象。,c

3、lass Father /父类Father String name; public void Set_Name(String sn)/设置姓名 name=sn; public void Father_Access() System.out.println(“我是父亲“+name); ,6.1 Java类的继承,class Son extends Father/儿子类Son String nickname; /新添加成员nickname描述儿子的小名 public void Set_NickName(String sn) /新添加成员 nickname=sn; public void Son_A

4、ccess() /访问儿子 System.out.println(“我是儿子“+name+“,我的小名是“+nickname); ,6.1 Java类的继承,public class Test public static void main(String args) Father fat=new Father(); /子类对象定义和初始化 fat.Set_Name(“彭政“); /设置父亲姓名 Son son=new Son(); son.Set_Name(“彭龙“); /设置儿子姓名 son.Set_NickName(“龙龙“); /设置儿子小名 fat.Father_Access(); /

5、访问父亲对象 son.Son_Access(); /访问儿子对象 ,6.1 Java类的继承,程序执行结果: 我是父亲彭政 我是儿子彭龙,我的小名是龙龙,6.1 Java类的继承,父类对象fat和子类对象son,6.1 Java类的继承,6.1.3 子类的构造方法,创建子类对象分两步, 首先调用父类构造方法创建好父类部分并初始化, 之后调用子类构造方法创建新添加成员部分并初始化。 在子类内部可以通过super关键字来访问父类中的成员,包括父类构造方法。,6.1 Java类的继承,【例6-2】构造方法的调用。,class Father /父类Father String name; /姓名 int

6、 age; /年龄 public Father(String sn,int a) /父类构造方法 name=sn;age=a; public void Father_Access() System.out.println(“我是父亲”+name+“,今年“+age+“岁了“); ,6.1 Java类的继承,class Son extends Father /儿子类Son String nickname; /小名 Son(String n1,String nickname,int age)/子类构造 方法 super(n1,age); /调用父类构造方法 this.nickname=nickna

7、me; public void Son_Access() System.out.println(“我是儿子“+super.name+“,小名是“+nickname+ “,今年“+super.age+“岁了“); ,6.1 Java类的继承,public class Test public static void main(String args) Father fat=new Father(“彭政“,37); /子类对象定义和初始化 Son son=new Son(“彭龙“,“龙龙“,10); fat.Father_Access(); son.Son_Access(); 程序执行结果: 我是父

8、亲彭政,今年37岁了 我是儿子彭龙,小名是龙龙,今年10岁了,6.1 Java类的继承,Java中只能使用super关键字调用父类构造方法,使用方法是: super( 父类构造方法中的实际参数 ),使用super调用父类构造方法时注意super语句只能是子类构造方法中的第一条语句,否则编译出错。另外,虽然super语句写在子类构造方法中,但却不是由子类构造方法调用,而是由系统调用。,6.1 Java类的继承,除了通过super调用父类的构造方法之外,还可以通过super访问父类部分的成员,其使用格式是如下: super.数据成员 或 super.方法成员名( 实际参数表 ),6.1 Java类

9、的继承,Java编译器为每个对象定义了一个特殊数据成员this,该成员属于引用到对象本身。因此可以在类中通过this访问对象本身的各种成员。,6.1.4 在子类中访问父类中的成员,子类和父类同包时: 父类中非private成员可以在子类中随意访问。 子类和父类不同包时: 父类中只有public、protected成员可以在子类中访问。,6.1 Java类的继承,【例6-3】对父类成员的访问。,class A /父类A public int a=2; /父类的公共成员a private int b=3; /父类的私有成员b protected int c=4; /父类的保护成员c int x;

10、/默认访问控制成员 public A() /无参构造方法 public int outputB() return b; /公共方法outputB ,6.1 Java类的继承,public class B extends A /子类B public int d; /子类新添加公共成员d public void testVisitControl() System.out.println(“父类子类同包时对父类中各种访问控制成 员的访问:“); System.out.println(“访问父类中的public成员a=“+a); System.out.println(“直接访问父类中的private成

11、员b将导致编译出错!“); System.out.println(“利用父类的公共接口outputB可以成功n访问父类中 的private成员b=“+outputB(); System.out.println(“访问父类中的protected成员c=“+c); System.out.println(“访问父类中的默认访问控制成员X=“+x); ,public static void main (String args) B b=new B(); b.testVisitControl(); ,6.1 Java类的继承,回目录,6.2 Java类的多态,6.2.1 方法重载,方法重载: 在一个类中

12、有多个方法具有相同的名字,但是这些方法的参数的个数、类型或顺序不同。 通常情况,需要在同一个类中定义几个功能类似但参数不同的方法时可以用到方法重载。 同一类中可以对方法进行重载,在继承层次中同样可以进行方法重载。,例: class A public void f() public class B extends A public int f(int) public int f(double) ,6.2 Java类的多态,6.2.2 方法覆盖,方法覆盖: 允许子类对父类中方法重新进行定义(方法名和参数类型、个数、顺序不变)。,6.2 Java类的多态,【例6-4】方法覆盖的使用。,class C

13、ircle public final double PI=3.1415926;/定义常量PI int r;/定义圆半径 double Area() /计算圆的面积 return PI*r*r; double Length() /计算圆的周长 return 2*PI*r; Circle(int r) this.r=r; ,6.2 Java类的多态,class Cylinder extends Circle int h;/定义圆柱体的高 double Area() /覆盖父类中的Area方法 return Area(0.0)+Area(0);/底面积+侧面积 double Area(int i)

14、/计算圆柱体底面积 return 2*super.Area(); double Area(double d) /计算圆柱侧面积 return super.Length()*h; double Volume()/计算圆柱体的体积 return super.Area()*h; . ,6.2 Java类的多态,public class Test public static void main(String args) Circle cir=new Circle(10); Cylinder cy=new Cylinder(20,10); System.out.println(“半径为”+cir.r+“

15、的圆面积是: “+cir.Area(); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体上下底面积是:“+cy.Area(0); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体侧面积是:“+cy.Area(0.0); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体表面积是:“+cy.Area(); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体体积是:“+cy.Volume(); ,6.2 Java类的多态,程序执行结果: 半径为10的圆面积是:314.15926 底面半径为20高为10的圆柱体上下底面积是:2513.27408

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号