




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,主讲:周清,JAVA程序设计基础,TEL第六章 类的继承、抽象类与接口,3,通过本章的学习,主要掌握以下知识点: 类的继承 子类的创建 调用父类中特定的构造方法 在子类中访问父类的成员 覆盖 抽象类 接口 内部类与匿名类 包,4,本章的重点: 类的继承 覆盖 抽象类 接口 本章的难点: 内部类与匿名类,5,类的继承,理解继承是理解面向对象程序设计的关键。 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。 在Java中,不允许多继承。,6,6.1 类的继承,通过继承可以实现代码的复用。 父类或超类(superclass) 被继承的类 子类(subclass) 由继承而得到的类 一个父类可以同时拥有多个子类,但由于Java中不支持多重继承,所以一个类只能有一个直接父类。,7,在Java语言中有一个称为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。,8,格式: class SubClass extends SuperClass 把SubClass声明为类SuperClass的直接子类,如果SuperClass又是某个类的子类,则SubClass同时也是该类的间接子类。,6.1.1 子类的创建,9,如果没有extends关键字,则该类默认为java.lang.Object类的子类。因此,在Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。所以在此之前的所有例子均是java.lang.Object类的子类。,10,1.子类的构建方法【例6.1】类的继承,/app6_1.java 继承的简单例子 class Person /Person类是java.lang.Object类的子类 private String name; /name表示姓名 private int age; /age表示年龄 public Person() /定义无参构造方法 System.out.println(“调用了个人构造方法Person()”); public void SetNameAge(String name, int age) =name; this.age=age; ,11,public void show() System.out.println(“姓名:“+name+” 年龄:”+age); class Student extends Person /定义Student类,继承自Person类 private String department; public Student() / Student的构造方法 System.out.println(“调用了学生构造方法Student()”); ,12,public void SetDepartment(String dep) department=dep; System.out.println(“我是”+department +”的学生”); public class app8_1 /主类 public static void main(String args ) Student stu=new Student(); /创建Student对象 stu.SetNameAge(“张小三”,21);/调用父类的SetNameAge()方法 stu.show(); /调用父类的show()方法 stu.SetDepartment(“计算机系”); /调用子类的SetDepartment方法 ,13,程序执行的结果为: 调用了个人构造方法Person() 调用了学生构造方法Student() 姓名:张小三 年龄:21 我是计算机的学生,14,说明: (1)通过extends关键字,可将父类的成员继承给子类。 (2)Java在执行子类的构造方法之前,会先自动调用父类中没有参数的构造方法,其目的是为了帮助继承自父类的成员做初始化的操作。 (3)在严格意义上说,构造方法是不能被继承的,例如父Person有一个构造方法Person(String,int),不能说子类Student也自动有一个构造方法Person(String,int),但这并不意味着子类不能调用父类的构造方法。,15,2.调用父类中特定的构造方法,【例6.2】调用父类中某指定的构造方法。,/app6_2.java 调用父类中的特定构造方法 class Person /定义Person private String name; private int age; public Person() /定义无参构造方法 System.out.println(“调用了Person的无参构造方法”); public Person(String name, int age) /定义有参构造方法 System.out.println(“调用了Person的有参构造方法”); =name; this.age=age; ,16,public void show() System.out.println(“姓名:“+name+” 年龄:”+age); class Student extends Person /定义继承自Person类的子类 Student private String department; public Student() / Student的无参构造方法 System.out.println(“调用了学生的无参构造方法Student()”); ,17,public Student (String name,int age,String dep) /定义Student的有参构造 方法 super(name,age); /调用父类的有参构造方法,在第10行定义的 department=dep; System.out.println(“我是”+department +”的学生”); System.out.println(“调用了学生的有参构造方法Student(String dep)”); public class app6_2 /主类 public static void main(String args ) Student stu1=new Student(); /创建对象,并调用无参构造方法 Student stu2=new Student(“李小四”,23,”信息系”); /并调用有参构造方 法 stu1.show(); stu2.show(); ,18,程序运行结果如下: 调用了Person的无参构造方法 调用了学生的无参构造方法Student() 调用了Person的有参构造方法 我是信息系的学生 调用了学生的有参构造方法Student(String dep) 姓名:null 年龄:0 姓名:李小四 年龄:23,19,6.1.2 在子类中访问父类的成员,格式: super. super.,20,1 /app6_3.java 用protected修饰符和super关键字访问父类的成员 2 class Person /定义Person 3 4 protected String name; 5 protected int age; 6 public Person() /定义“不做事”的无参构造方法 7 public Person(String name, int age) /定义有参构造方法 8 9 =name; 10 this.age=age; 11 12 protected void show() 13 14 System.out.println(“姓名:“+name+” 年龄:”+age); 15 16 ,【例8.3】在子类中访问父类的成员。,21,17 class Student extends Person /定义子类Student,其父类为Person 18 19 private String department; 20 int age=20; /新添加了一个与父类的成员变量age同名的成员变量 21 public Student (String xm,String dep) /定义Student的有参构造方法 22 23 name=xm; /在子类里直接访问父类的protected成员 24 department=dep; 25 super.age=25; /利用super关键字将父类的成员变量age赋值为25 26 System.out.println(“子类Student中的成员变量age=”+age); 27 super.show(); /去掉super而只写show()亦可 28 System.out.println(“系别:”+ department ); 29 30 ,31 public class app8_3 /主类 32 33 public static void main(String args ) 34 35 Student stu=new Student(“李小四”,”信息系”); 36 37 ,22,程序执行结果为: 子类Student中的成员变量age=20 姓名:李小四 年龄:25 系别:信息系,23,6.1.3 覆盖,覆盖(Overriding) 是指在子类中定义名称、参数个数与类型均与父类相同的方法,用以重写父类里同名方法的功能。,24,1.覆盖父类的方法,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数类型列表。,25,例 6.4 以个人类Person为父类,创建学生子类Student,并用子类方法覆盖父类方法。,/app6_4.java 方法的覆盖 class Person /定义Person protected String name; protected int age; public Person(String name, int age) /定义构造方法 =name; this.age=age; public void show() System.out.println(“姓名:“+name+” 年龄:”+age); ,26,class Student extends Person /定义子类Student,其父类为Person private String department; public Student (String name,int age,String dep) /定义构造方法 super(name,age); department=dep; public void show() /覆盖父类Person中的的同名方法 System.out.println(“系别:”+ department); ,27,public class app6_4 public static void main(String args ) Student stu=new Student(“王老五”,24,”电子”); stu.show(); ,28,2.用父类的变量访问子类的成员,通过父类对象也可以访问子类成员。,29,【例6.5】利用父类对象调用子类中成员。,1 /app6_5.java 通过父类的对象来调用子类的成员 2 class Person /定义Person 3 4 protected String name; 5 protected int age; 6 public Person(String name, int age) /定义构造方法 7 8 =name; 9 this.age=age; 10 11 public void show() 12 13 System.out.println(“姓名:“+name+” 年龄:”+age); 14 15 ,30,16 class Student extends Person /定义子类Student,其父类为Person 17 18 private String department; 19 public Student (String name,int age,String dep) /定义构造方法 20 21 super(name,age); 22 department=dep; 23 24 public void show() 25 26 System.out.println(“系别:”+ department); 27 28 public void subshow() 29 30 System.out.println(“我在子类中”); 31 32 ,31,33 public class app6_5 /主类 34 35 public static void main(String args ) 36 37 Person per=new Student(“王老五”,24,”电子”); /声明父类变量per指向对象 38 per.show(); /利用父类对象per调用show()方法 39 /per.subshow(); 40 41 ,程序执行结果为: 系别:电子,32,6.1.4 不可被继承的成员与最终类,如果父类的成员不希望被子类的成员所覆盖可以将它们声明为final。如果用final来修饰成员变量,则说明该成员变量是最终变量,即常量,程序中的其他部分可以访问,但不能修改。,33,6.1.5 Object类,在Java语言中有一个特殊类Object,该类是java.lang类库里的一个类,所有的类都是直接或间接地继承该类而得到的。,34,表6.1 Object类常用的方法,35,6.2 抽象类,在Java中可以创建专门的类来做为父类,这种类被称为“抽象类”(Abstract class)。抽象类有点类似“模板”的作用,其目的是根据它的格式来创建和修改新的类。,36,6.2.1 抽象类与抽象方法,定义抽象类的语法格式如下: abstract class 类名 声明成员变量; 返回值的数据类型 方法名(参数表) abstract返回值的数据类型 方法名(参数表); ,37,6.2.2 抽象类的应用,由于抽象类的目的是要根据它的格式来创建新的类,所以抽象类里的抽象方法并没有定义处理数据的方法体,而是要保留给由抽象类派生出的新类来定义。,38,6.3 接口,接口(Interface)是Java所提供的另一种重要功能,它的结构与抽象类非常相似。接口本身也具有数据成员与抽象方法。,39,6.3.1 接口的定义,接口定义的语法格式如下: public interface 接口名称 extends 父接口名列表 publicstaticfinal 数据类型 成员变量名=常量; publicabstract 返回值的数据类型 方法名(参数表); ,40,6.3.2 接口的实现与引用,在声明一个类的同时用关键字implements来实现一个接口。接口实现的语法格式为: class 类名称 implements 接口名表 ,41,一个类要实现一个接口时,应注意以下问题: (1)非抽象类中不能存在抽象方法。 (2)一个类在实现某接口的抽象方法时,必须使用完全相同的方法头。 (3)接口中抽象方法的访问控制修饰符都已指定为public,所以类在实现方法时,必须显示地使用public修饰符。,42,6.3.3 接口的继承,与类相似,接口也有继承性。定义一个接口时可通过extends关键字声明该新接口是某个已存在的父接口的派生接口,它将继承父接口的所有变量与方法。与类的继承不同的是,一个接口可以有一个以上的父接口,它们之间用逗号分隔,形成父接口列表。 。,43,6.3.4 利用接口实现类的多重继承,所谓多重继承,是指一个子类可以有一个以上的直接父类,该子类可以继承它所有直接父类的成员。Java虽不支持多重继承,但可利用接口来实现比多重继承更强的功能。 一个类实现多个接口时,在implements子句中用逗号分隔。,44,6.4 内部类与匿名类,内部类(Inner Class)是定义在类中的类,内部类的主要作用是将逻辑上相关的类放到一起;而匿名类(Anonymous Class)是一种特殊的内部类,它没有类名,在定义类的同时,就生成该类的一个实例,由于不会在其他地方用到该类,所以不用取名字。,45,6.4.1 内部类,内部类是包含在类中的类,所以内部类也称为“嵌套类”,包含内部类的类又称为“外部类”。其实内部类可以看作是外部类的一个成员,所以内部类也称为“成员类”。,46,/Group.java 内部类与外部类的访问规则内部类外部类 public class Group private int age; /声明外部类的私有成员变量 public class Student /声明内部类 String name; /声明内部类的成员变量 public Student(String n,int a) /定义内部类的构造方法 name=n; /访问内部类的成员变量name age=a; /访问外部类的成员变量age public void output() /内部类的成员方法 System.out.println(“姓名:”++”;年龄:”+age); ,【例6.14】内部类与外部类的访问规则。,47,public void output() /定义外部类的成员方法 Student stu=new Student(“刘 洋”,24
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于形式化验证技术-洞察及研究
- 2025年度融资租赁合同范本发布
- 工业互联网平台2025年计算机视觉缺陷检测技术在智能工厂生产设备智能优化中的应用研究
- 2025年工业机器人柔性制造系统成本效益分析报告
- 主管护师(中级)考试黑钻押题含答案详解【突破训练】
- 数字化转型中的文化适应-洞察及研究
- 三农村生态环境保护规划纲要
- 汽车行业智能汽车制造与质量监控方案
- 五年级数学(小数乘法)计算题专项练习及答案汇编
- 重难点自考专业(市场营销学)(夺冠系列)附答案
- 2025年秋季学期第一次中层干部会议上校长讲话:凝心聚力明方向沉心落力干实事
- 医院患者身份识别核查流程规范
- 2025年北京市综合评标专家库专家考试历年参考题库含答案详解(5套)
- 2025年全国特种设备安全管理人员A证考试题库(含答案)
- 烟酒行经营合作合同范本
- 第23课 全民族抗战与抗日战争的胜利 2024-2025学年中职高一上学期高教版
- DGJ08-81-2015 现有建筑抗震鉴定与加固规程
- 《人为因素与航空法规》课件(共九章)
- 部编新课标培训课件
- 非工作时间行为协议
- 老年病人麻醉管理
评论
0/150
提交评论