第4章继承和多态.ppt
《第4章继承和多态.ppt》由会员分享,可在线阅读,更多相关《第4章继承和多态.ppt(74页珍藏版)》请在三一文库上搜索。
1、第 4 章 继承和多态,雷擎 对外经济贸易大学信息学院,content,4.1 什么是继承 4.2 抽象类与抽象方法 4.3 接口 4.4 多态性 实验:继承与多态,4.1 什么是继承,由已有的类创建新类 是面向对象程序设计的基石之一 新类拥有 所继承的已有类的功能 子类是父类的特殊化 继承机制可以提高程序的抽象程度,提高代码的可重用性,继承的概念,基类(base class) 也称超类(superclass) 是已有的类,被直接或间接继承 派生类(derived-class) 也称子类 (subclass) 是新类,继承已有类后得到的类,继承的概念,继承的概念 父类(超类、基类):描述具有
2、某些共同个性的类。 子类(派生类):在父类的基础上,对其中某一部分对象的特殊共性进一步描述,则得到此父类的子类(派生类)。 子类的对象拥有其父类全部或部分属性与方法的定义过程,称为子类对父类的继承。,is_a关系,子类对象与父类对象的关系 存在“IS A”(或“is kind of”)的关系,undergraduate,student,is kind of,继承的特点,类的继承允许多层的继承关系,也就是子类可以有它自己的子类。 Java所有的类都直接或间接继承于Object类,所有类类型都可以当做Object类型使用。 Java的继承层次是无限的。,4.1 什么是继承,4.1.1 继承的语法
3、4.1.2 成员的继承 4.1.3 覆盖和隐藏 4.1.4 this和super的用法 4.1.5 final的意义,4.1.1 继承的语法,public class子类名 extends 父类名 /子类自身构造方法的定义 /子类自身成员属性的定义 /子类自身成员方法的定义 . Java只能做单继承,例:继承的语法,class Person private String id; private String name = “宝宝“; private boolean gender; private Date birthday; /private final Date birthday; publ
4、ic Person () /have to set value to birthday /if delete this constructor, subclass have problems. public Person(String id, String name) this.id = id; this.name = name; this.gender = false; this.birthday = ,class Student extends Person int stuId; String name; Date enrolDate; public Student() public St
5、udent(String id, String name, Date date) super(id, name); ,public class Undergraduate extends Student String collegeName; String major; public Undergraduate() . public Undergraduate(String id, String name) super(id, name); ,4.1.2 成员的继承,子类可以继承父类的属性,初始值为父类中该属性的初值 子类不能直接访问父类中非private的属性,但可以通过调用父类的publi
6、c方法访问private属性。 子类可以继承父类的成员方法,但无法直接访问父类的private方法。,子类对父类成员属性和方法的继承,子类和父类在同一包中 子类可以访问父类中不是private的成员变量和方法 子类和父类在不同包中 子类可以访问父类中public和protected成员变量和方法,不能访问默认和private的成员变量和方法,例:子类对父类的继承,class ParentClass private int x; / 声明私有成员 protected int y;/ 声明保护成员 int z;/ 声明缺省成员 public int w; / 声明公有成员 public void
7、parentmethod() System.out.println(“call parent class function: parentmethod()“); ;,class SonClass extends ParentClass / 派生类中不能继承父类中的私有成员,其他成员均可继承 public void displayprivate() / 引用父类中私有成员 / System.out.println(“X=“+x); public void displayprotected() / 引用父类中保护成员 System.out.println(“Y=“ + y); public voi
8、d displaypublic() / 引用父类中公有成员 System.out.println(“W=“ + w); public void displaydefault() / 引用父类中的默认成员 System.out.println(“Z=“ + z); ;,class SonClass1 extends ParentClass ; public class Test4_1 public static void main(String args) ParentClass parent = new ParentClass(); SonClass son = new SonClass();
9、 SonClass1 son1 = new SonClass1(); / 三句执行的效果一样,son、son1中没有自己定义parentmethod()方法,它继承了父类中的 parent.parentmethod(); son.parentmethod(); son1.parentmethod(); ,构造方法的继承,有继承时的构造方法遵循以下的原则 子类不能从父类继承构造方法 好的程序设计方法是在子类的构造方法中调用某一个父类构造方法,调用语句必须出现在子类构造方法的第一行,可使用super关键字 如子类构造方法的声明中没有明确调用父类构造方法,则系统在执行子类的构造方法时会自动调用父类的
10、默认构造方法(即无参的构造方法),构造方法的继承,子类的构造方法会自动调用父类的无参构造方法。 带参数的构造方法不会被子类继承,也不会自动调用。在子类中,对父类有参构造方法可以使用super显示调用,初始化,回顾:类的构造方法 Case Study:Undergraduate.java 在构造方法内调用构造方法:this 的使用 可以用this在一个构造方法内调用另一个构造方法,但不可调用两个; 若有构造方法调用,必须是第一步。,父类与子类传递构造函数,缺省构造函数 Case Study: Catoon.java 传递参数:super() Case Study: AboutSubClassCo
11、nstructor,4.1.3 覆盖和隐藏,子类只能继承父类中 访问控制权限为public、protected和default的成员变量和方法 子类不能继承 访问权限为private的成员变量和方法 子类不能继承父类中的静态属性,但可以通过super进行操作,方法的覆盖,成员方法的覆盖 当子类中定义了与父类同名、同参数和同返回值类型的成员方法,则父类的成员方法被重写,子类的方法覆盖了父类中的方法,称为方法的隐藏 方法重写,是运行时多态的基础 在子类中调用同名的方法时,是调用它自己定义的方法;若要使用父类中被覆盖的方法,可以使用super关键字。,例:方法的覆盖,public class Sup
12、erClass void print() System.out.println(“This is the superclass!“); public static void main(String args) SuperClass sup = new SuperClass(); sup.print(); SubClass sub = new SubClass(); sub.print(); class SubClass extends SuperClass void print() System.out.println(“This is the subclass!“); ;,成员变量的隐藏,成
13、员变量的隐藏 当子类中定义了与父类同名的成员变量,则父类的成员变量被隐藏 在子类执行从父类继承的方法时,使用this可以访问本类中的实例变量,关键字super可以访问被隐藏的父类实例变量。,4.1.4 this和super的用法,this: 指当前对象,其调用格式为: this.成员变量 this.成员方法 this( parameters list) super:指父类对象,其调用格式为: super.成员变量 super.成员方法 super( parameters list),this的用法,1 返回当前对象的引用 2 在实例变量和局部变量同名的时候访问当前对象的实例变量 3 在类的构造
14、方法中调用这个类的其他的构造方法 4 不能在静态方法或静态代码块中使用this,例:this的用法,public class PersonA private String name; private int age; PersonA() this(“No name“,0); System.out.println(“In PersonA constuctor“); ,PersonA(String name, int age) setName(name); / 你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的 this.setAge(age); this
15、.print(); System.out.println(“In PersonA constuctor with parameters“); ,public void setName(String name) this.name = name;/ 此处必须指明你要引用成员变量 public void setAge(int age) this.age = age; public void print() System.out.println(“Name=“ + name + “ Age=“ + age);/ 在此行中并不需要用this,因为没有会导致混淆的东西 ,super的用法,1 调用被子类
16、隐藏的父类的实例变量 2 调用父类的方法 3 在子类里面调用父类的构造方法 如果不显示的调用则默认的调用父类无参的构造方法如果父类没有无参的构造方法这程序报错 4 父类中定义为private的变量和方法,子类不能继承,使用super也无法访问。,例:super的用法,public class PersonB extends PersonA public void print() System.out.println(“DemoSuper:“); super.print(); public static void main(String args) PersonB b = new PersonB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承
链接地址:https://www.31doc.com/p-2577715.html