
第5章子类与继承 王绍卿
1 第5章 子类与继承 王绍卿

导读 主要内容 ● 子类与父类 子类的继承性 ● 子类对象的特点 ● 成员变量的隐藏和方法重写 ● super关键字, ● final关键字 对象的上转型对象 继承与多态 ● abstract类与abstract方法 ● 面向抽象编程, ● 开-闭原则 难点 成员变量的隐藏和方法重写 ● 开-闭原则 2025/4/2 2
2025/4/2 2 导读

§5.1子类与父类 利用继承,可以先编写一个共有属性的一般 类,根据该一般类再编写具有特殊属性的新类, 新类继承一般类的状态和行为,并根据需要增加 它自己的新的状态和行为。 由继承而得到的类称为子类,被继承的类称 为父类。 声明一个类的子类的格式如下: class子类名extends父类名{ 例如: class Student extends People
3 §5.1 子类与父类 利用继承,可以先编写一个共有属性的一般 类,根据该一般类再编写具有特殊属性的新类, 新类继承一般类的状态和行为,并根据需要增加 它自己的新的状态和行为。 由继承而得到的类称为子类,被继承的类称 为父类。 例如: class Student extends People { . . } 声明一个类的子类的格式如下: class 子类名 extends 父类名 { . . }

类的继承 通过类的继承方式,可以不用编写相同的代码 就能开发出新的类,即程序代码复用。 继承将相关类组成层次结构,允许新类从已存 ■ 在的类中派生,保留它们的属性(即成员变量) 和方法,并根据自己的要求添加新的属性和方 法
类的继承 ◼通过类的继承方式,可以不用编写相同的代码 就能开发出新的类,即程序代码复用。 ◼继承将相关类组成层次结构,允许新类从已存 在的类中派生,保留它们的属性(即成员变量) 和方法,并根据自己的要求添加新的属性和方 法

类的继承 客机一飞机 交通工具 轿车 汽车 货车 对象 子类 父类 超类
类的继承 轿车 货车 汽车 对象 子类 父类 交通工具 超类 客机 飞机

类的继承 ■ 若一个子类只有一个父类,称为单继承反之, 称为多继承。Java不支持多继承,但支持多接 口。 ■子类的对象也是其超类的对象,反之未必。 继承具有传递性。 ■ ■子类的方法可以访问超类或父类的某些成员变 量和方法
类的继承 ◼若一个子类只有一个父类,称为单继承;反之, 称为多继承。Java不支持多继承,但支持多接 口。 ◼子类的对象也是其超类的对象,反之未必。 ◼继承具有传递性。 ◼子类的方法可以访问超类或父类的某些成员变 量和方法

§5.2 子类的继承性 所谓子类继承父类的成员变量作为自己的 一个成员变量,就好象它们是在子类中直接声 明一样,可以被子类中自己定义的任何实例方 法操作。 所谓子类继承父类的方法作为子类中的一个 方法,就象它们是在子类中直接定义了一样, 可以被子类中自己定义的任何实例方法调用。 2025/4/2
2025/4/2 7 §5.2 子类的继承性 所谓子类继承父类的成员变量作为自己的 一个成员变量,就好象它们是在子类中直接声 明一样,可以被子类中自己定义的任何实例方 法操作。 所谓子类继承父类的方法作为子类中的一个 方法,就象它们是在子类中直接定义了一样, 可以被子类中自己定义的任何实例方法调用

§5.2.1子类和父类在同一包中的继承性 如果子类和父类在同一个包中,那么,子类 自然地继承了其父类中不是private的成员变量 作为自己的成员变量,并且也自然地继承了父类 中不是private的方法作为自己的方法,继承的 成员变量或方法的访问权限保持不变。 2025/4/2
2025/4/2 8 §5.2.1 子类和父类在同一包中的继承性 如果子类和父类在同一个包中,那么,子类 自然地继承了其父类中不是private的成员变量 作为自己的成员变量,并且也自然地继承了父类 中不是private的方法作为自己的方法,继承的 成员变量或方法的访问权限保持不变

class car{ String brand; ∥品牌 String color; 颜色 void brake({System.out.println("踩了刹车"分} void speedup(){System.out.println("踩了油门")分 } class buick extends car String type; 车型 String number;∥车牌号码 public class test public static void main(String ]args){ buick p=new buickO); p.brand=-"别克"; p.color=-"白色"; p.ype="凯越; p.number="C-A8888"; System.out.println(p.brand+""+p.number);
class car { String brand; //品牌 String color; //颜色 void brake(){System.out.println("踩了刹车");} void speedup(){System.out.println("踩了油门");} } class buick extends car { String type; //车型 String number; //车牌号码 } public class test{ public static void main(String [ ]args){ buick p=new buick(); p.brand="别克"; p.color="白色"; p.type="凯越"; p.number="鲁C-A8888"; System.out.println(p.brand+" "+p.number); } }

§5.2.1子类和父类在同一包中的继承性 class point{ int x,y; point(int a,int b){x=a;y=b; point() {X=0;y=0;} } class circle extends point{ int radius; circle(int r,int a,int b){ radius=r; x=a; y=b; }
§5.2.1 子类和父类在同一包中的继承性 class point{ int x, y; point(int a, int b) { x=a; y=b; } point( ) { x=0; y=0; } } class circle extends point{ int radius; circle(int r, int a, int b){ radius=r; x=a; y=b; } }