继承性的好处
① 减少了代码的冗余,提高了代码的复用性
② 便于功能的扩展
③ 为之后多态性的使用,提供了前提
继承性的格式
class A extends B{}
A:子类、派生类(subclass)
B:父类、超类、基类(superclass)
特别说明
继承性的体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。
特殊的:父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。只有因为封装性的影响,使得子类不能直接调用父类的结构而已。
注:子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展。子类和父类的关系,不同于子集和集合的关系。
Java中关于继承性的规定
1.一个类可以被多个子类继承。
2.Java中类的单继承性:一个类只能有一个父类
3.子父类是相对的概念。
4.子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类(直接父类继承的父类)
5.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
继承中关于Object 的说明
1. 如果我们没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类
2. 所有的java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类
3. 意味着,所有的java类具有java.lang.Object类声明的功能。
实例演示
父类
public class Person {
private String name;
private int age;
public Person(){};
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show(){
System.out.println("Person类定义方法");
}
}
子类继承父类(代码内super的相关用法,参看这篇文章)
public class StudentExtendsPerson extends Person {
public static void main(String[] args) {
StudentExtendsPerson s1 = new StudentExtendsPerson();
s1.show();//子类继承父类方法
s1.setName("张三");
s1.study();
}
String major;//子类特有属性
public StudentExtendsPerson(){};
public StudentExtendsPerson(String name, int age, String major) {
//写法1:
super(name, age);
/* //写法2:这种写法,父类定义的属性权限不能为private
this.name = name;
this.age = age;*/
/* //写法3:
setName(name);
setAge(age);*/
this.major = major;
}
public void study(){
System.out.println(getName() +"学习");
}
}
子类对象实例化的全过程
从结果上来看:(继承性) 子类继承父类以后,就获取了父类中声明的属性或方法。创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。
从过程上来看:
当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,........直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用。
明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。