第4章继承多态与接口讲解材料

上传人:yuzo****123 文档编号:139357203 上传时间:2020-07-21 格式:PPT 页数:53 大小:423.50KB
返回 下载 相关 举报
第4章继承多态与接口讲解材料_第1页
第1页 / 共53页
第4章继承多态与接口讲解材料_第2页
第2页 / 共53页
第4章继承多态与接口讲解材料_第3页
第3页 / 共53页
第4章继承多态与接口讲解材料_第4页
第4页 / 共53页
第4章继承多态与接口讲解材料_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《第4章继承多态与接口讲解材料》由会员分享,可在线阅读,更多相关《第4章继承多态与接口讲解材料(53页珍藏版)》请在金锄头文库上搜索。

1、第4章继承、多态与接口,4.1 继承的概念 4.2 访问控制符 4.3 多态性 4.4 理解final修饰 4.5 抽象类和抽象方法 4.6 接口 4.7 内嵌类 4.8 对象引用转换,继承的概念,父类或超类。实际上是所有子类的公共域和公共方法的集合 子类,父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸 ,祖先类的所有成员均将成为子类拥有的“财富” Object类是所有类的祖先,Java继承的实现,class Student /未使用继承 private String address; /籍贯 private String name; /姓名 private int age; /年

2、龄 String no; /学号 public Student(String name1,int age1) name=name1; age=age1; /其它 ,Java继承的实现,class Student extends Person String no; /学号 /其它 ,只有no属性是新加入的,其它属性在Person类中均存在,以下程序在编译时将出错,为什么?,class parent String my; public parent(String x) my=x; public class subclass extends parent ,例4-1 类的继承中构造方法的调用测试,c

3、lass Person / Person类 private String address; /籍贯 private String name; /姓名 private int age; /年龄 public String getName() /获取人名 return name; public Person(String name1,String address1,int age1) name=name1; address=address1; age=age1; public Person() name=无名氏; ,例4-1 类的继承中构造方法的调用测试,public class Student

4、extends Person String no; /学号 public Student(String name1,String address1,int age1,String no1) super(name1,address1,age1); no=no1; public static void main(String a) Student x=new Student(张三,江西,25, 20012541); System.out.println(name=+x.getName(); System.out.println(no=+x.no); /Student y= new Student(

5、); 不能使用,子类无该构造方法 ,子类中将隐藏父类的同名变量,class parent int a=3;int m=2;public class subclass extends parent int a=4; int b=1; public static void main(String a) subclass my=new subclass(); System.out.println(a=+my.a+,b=+my.b+,m=+my.m); ,4.2.1 公共访问控制符 public,作为类的修饰符,将类声明为公共类, 表明它可以被所有的其它类所访问和引用 作为类的成员的访问修饰符,表明在

6、其他类中可以无限制地访问该成员。 要真正做到类成员可以在任何地方访问,在进行类设计时必须同时满足两点:首先类被定义为public,其次,类的成员被定义为public。,4.2.2 缺省访问控制符,没有给出访问控制符情形 该类只能被同一个包中的类访问和引用,4.2.3 私有访问控制符 private,用private修饰的域或方法只能被该类自身所访问 例4-3 测试对私有成员的访问 class Myclass private int a; /私有变量 void display() System.out.println(a); public class test public static voi

7、d main(String arg) Myclass my=new Myclass(); my.a=5; my.display(); ,4.2.4 保护访问控制符 protected,用protected修饰的成员可以在三种类中所引用: 该类本身; 与它在同一个包中的其它类; 在其它包中的该类的子类。,例4-4 测试包的访问控制的一个简单程序,文件1:PackageData.java(该文件存放在sub子目录下) package sub;public class PackageData protected static int number=1; 文件2:Mytest.java import

8、sub.*;public class Mytest public static void main( String args ) System.out.println(result=+PackageData.number); ,各类访问控制符的作用可以归纳为表3-1,4.3.1 方法的重载(例),public class A protected void test(int x,int y) System.out.println(test(int,int):+x+ +y); protected void test(int x) System.out.println(test(int): + x)

9、; protected void test(String str ) System.out.println(test(String): + str); public static void main (String args) A a1 = new A(); a1.test(hello); a1.test(5,4); ,4.3.1 方法的重载,通过形式参数表的差异来区分 方法调用的匹配原则: 1) 精确匹配 2) 自动转换匹配 基本类型转换 对象引用转换,例4-5 方法调用的匹配测试,public class A protected int x = 0; protected void test

10、(int x) System.out.println(test(int): + x); protected void test(Object obj) System.out.println(test(Object): + obj ); protected void test(String str ) System.out.println(test(String): + str); public static void main (String args) A a1 = new A(); a1.test(hello); a1.test(5); ,【思考】,如果在以上程序中加上如下方法,并将tes

11、t(int x)方法注释掉,则调用test(5)如何? protected void test(long x) System.out.println(test(long): + x ); 如果是以下情形, 调用test(6.3) ? protected void test(float x) System.out.println(test(float): + x ); ,4.3.2 方法的覆盖,以下类B定义的方法中,方法覆盖如何? class B extends A protected void test(int x) System.out.println(in B.test(int): + x

12、); protected void test(String x , int y) System.out.println(in B.test(String,int): + x+,+y); 【思考】通过子类B的对象可调用多少test方法?,关于方法覆盖有以下问题值得注意:,方法名、参数列表、返回类型完全相同才会产生方法覆盖; 如果返回类型不一样编译将报错。 方法覆盖不能改变方法的静态与非静态属性。子类中不能将父类非静态方法定义为静态方法,反之也一样。 不允许子类中方法的访问修饰符比父类有更多的限制。例如:子类不能将父类的public方法定义为protected方法。但可以将父类的private方法

13、在子类中重新定义为public方法. final方法不能被覆盖。,this -出现在类的实例方法或构造方法中,用来代表使用该方法的对象,(1)把当前对象的引用作为参数传递给另一个方法。 如: obj.f(this) (2)可以调用当前对象的其它方法或访问当前对象的实例变量。 如: this.g(); (3)使用this可以区分当前作用域中同名的不同变量。 String x; public Test(String x , int a) this.x=x; (4)一个构造方法中调用另一个构造方法。 public Test(final int x) this(x,0); ,(1) 用Super 访问

14、超类的变量或方法,class parent int a=3; void f() a=a+1; public class subclass extends parent int a=6; void f() super.f(); a= a+super.a -3; ,(2)调用超类的构造方法,public class graduate_student extends Student Date enterDate; /入校时间 public graduate_student(String name,int age, Date d) super(name,age); enterDate=d; ,如果有s

15、uper(),必须放在构造方法的第一条语句,子类中调用方法的查找过程以及this和super的用法,【思考】如果graduate_student中无toString()方法,则this.toString()将会出现什么情况?,4.5final修饰符,final作为类修饰符 -最终类 (不能有子类) 用final修饰方法 -不能被子类重新定义 用final定义常量 -只能赋值一次 注意: 如果将引用类型的变量标记为final,那么该变量固定指向一个对象,但可以改变对象内的属性值。,例4-7 常量赋值测试,public final class test public static int tota

16、lNumber=5; public final int id; public int weight; public test(int weight) id=totalNumber+; this.weight=weight; public static void main(String args) final test t=new test(5); t=new test(4); t.weight=t.weight+2; ,4.6.1 抽象类的定义,abstract class 类名称 成员变量; 方法() /一般方法 abstract 方法(); /抽象方法 在抽象类中可以包含一般方法和抽象方法。 所有的抽象方法必须存在于抽象类中。 抽象类表示的是一个抽象概

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

最新文档


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

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