为什么要有继承?
① 减少了项目中各个模块代码的冗余,提高了代码的复用性 (提高可维护性)
② 便于功能的扩展(提高可扩展性)
③ 为之后多态性的使用,提供了前提
继承的格式
class ClassAaa extends ClassBbb{}
ClassAaa:子类有时候也叫派生类,英文名为subclass
ClassBbb:父类有时候也叫超类、基类,英文名为superclass
说明
关键字extends翻译为中文是 延展、扩展
子类ClassAaa继承父类ClassBbb以后,子类ClassAaa中就获取了父类ClassBbb中声明的所有的属性和方法(包含父类中私有的private属性和方法)。
特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构,但是因为封装性(解决可见性的问题)的影响,使得子类不能直接调用父类私有的结构。
子类继承父类以后,子类还可以声明自己特有的属性或方法:实现功能的拓展,这样使得子类功能更为强大
子类和父类的关系,不同于子集和集合的关系。
Java中关于继承性的规定
1.一个类可以被多个子类继承
2.Java中类的单继承性:一个类只能有一个父类(不能有多个父类),不同于C++的多继承
3.子父类是相对的概念,Object类是Java类中所有类的父类,那么所有的类都具有Object的功能
4.子类直接继承的父类称为直接父类,间接继承的父类称为间接父类
5.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的所有的属性和方法
继承代码示例
继承树结构如下所示,代码中注明
//Creature.java
package com.ylaihui.oop2;public class Creature {public void breath(){System.out.println("breath...");}
}
//PersonpTest.java
package com.ylaihui.oop2;public class PersonpTest {public static void main(String[] args) {Teacher t = new Teacher();//t.age = 40; // private age : The field Personp.age is not visiblet.setAge(40);System.out.println(t.getAge());t.eat();t.name = "John";System.out.println(t.getName());t.show();// 继承间接父类的方法t.breath();}
}
//Teacher.java
package com.ylaihui.oop2;public class Teacher extends Personp {String major;Teacher(){}public void show(){System.out.println(major);}
}
//PersonpTest.java
package com.ylaihui.oop2;public class PersonpTest {public static void main(String[] args) {Teacher t = new Teacher();//t.age = 40; // private age : The field Personp.age is not visiblet.setAge(40);System.out.println(t.getAge());t.eat();t.name = "John";System.out.println(t.getName());t.show();// 继承间接父类的方法t.breath();}
}