chapter03java语言的面向对象特征3_继承_this_super_多态.ppt
第三章 Java语言的面向对象特征_part3,吕嘉,大作业:类设计,请设计一组类,要求 (1)能够通过对象的交互表示借书和还书流程; (2)设计必须包含以上面向对象语言的语法特性,并使用文档说明 封装性:使用private/public修饰类的成员 继承性:建立某些类之间的继承关系 多态 :某些成员方法之间包含重载/覆盖关系,(3)设计可以参考以下实体、属性和行为,图书馆 属性:图书数组 行为:新增、删除图书 图书: 属性:图书编号、书名、作者 读者: 属性:读者编号、读者类型(学生/教师)、借阅数组 行为:借书、还书 借阅 属性:图书、读者,3.4 继承和多态(难点),继承:最主要特点 多态:最重要特点 3.4.1 子类和父类 继承的传递性 this和super 子类对象的初始化 引用类型变量转换,3.4.1 子类和父类,创建子类语法 class extends { 子类体 } (1)继承的传递性(P109,自己看) (2)this和super this:指向调用当前方法的对象(谁调用方法就是谁) super:指向调用当前方法的对象的父类定义部分,例子:this和super,class Father{ void f1(){ System.out.println(“Father.f1 is invoked“); } },class Son extends Father{ void f1(){ //覆盖Father类的f1 System.out.println(“Son.f1 is invoked“); } void f2(){ this.f1(); } void f3(){ super.f1(); } },例子:this和super,public class ThisSuper01 { public static void main(String[] args) { Son son=new Son(); son.f1(); son.f2(); son.f3(); } },Son.f1 is invoked Son.f1 is invoked Father.f1 is invoked,(2)关键字:this和super,,父类,子类,类的定义,关键词 this的用途,应用1: 加强程序可读性(this可有可无),class Demo1 { private double x, y; Demo1(double i, double j) { this.x=i; this.y=j; } double average() { return (x+y)/2; } public static void main(String args[]) { Demo1 d = new Demo1(3, 4); System.out.println(d.average()); } },3.5,关键词 this的用途,应用2:解决程序的语法歧义问题 说明:如果没有this,对于同名的方法参数和成员变量,方法参数的优先级高,class Apple { String color; public Apple(String color){ this.color=color; } },关键词 this的用途,public class Leaf { private int i=0; Leaf increment(){ i++; return this; } void print() { System.out.println(i); } public static void main(String[] args) { Leaf x=new Leaf(); x.increment().increment().increment().print(); } },3,应用3: 返回当前对象,关键词 this的用途,应用4: 在一个构造方法中调用另一个构造方法,class Flower { String name; int price; Flower () { this(“tulip“, 10); } Flower (String s, int i) { name = s; price = i; },void print () { System.out.println(name + “ “ + price); } public static void main(String args[]){ Flower f = new Flower(); f.print(); } },(3)子类对象的初始化,在创建子类对象时,不仅需要对自身成员变量初始化,还要对继承的父类中成员变量初始化 构造方法是不能被继承的,但是可以在子类的构造方法中调用父类的构造方法(super),构造方法总结(P110),类中没有定义构造方法,系统自动提供一个不带参数的默认构造方法 在用户自定义的构造方法中,可以用this调用本类的其它构造方法,可以用super调用父类的构造方法 当子类this和super都不用时,系统会自动加上super()调用父类的不带参数的构造方法 子类显式调用this或者super语句必须放在第一条语句,且this和super最多只能调用其一个 构造方法可以重载,例子:自动调用父类的构造方法,class Father{ int age; public Father(){ System.out.println(“Father() is running“); } public Father(int age){ this.age=age; System.out.println(“Father(int age) is running“); } },例子:自动调用父类的构造方法,class Son extends Father{ public Son(){ System.out.println(“Son() is running“); } public Son(int age){ System.out.println(“Son(int age) is running“); } public static void main(String[] args) { Father s1=new Son(); Father s2=new Son(1); } },Father() is running Son() is running Father() is running Son(int age) is running,例子:主动调用其它构造方法和父类构造方法,