继承
1子类继承了所有的方法和属性,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问。
2子类必须调用父类的构造器,完成父类的初始化。
3创建子类对象时,不管使用子类的哪个构造器,默认情况下总会调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器去完成对父类的初始化工作,负责编译不通过。
4如果希望指定去调用父类某个构造器,用super(参数)
5super在使用,一定放在构造器第一行
6super()和this()都只能放在第一行,所以这两个方法只能有一个存在
继承的本质
package com.ljy.extend;
//extends 本质
public class ExtendsTheory {
public static void main(String[] args) {
Son son = new Son();//内存的布局
System.out.println(son.name);
//1 看子类是否有该属性
//2 如果子类有这个属性,并且可以访问,则返回信息
//3 如果子类没有这个属性,就看父类有没有这个属性(如果父类有并且可以访问,就返回信息
//4 如果父类没有就按照3继续向上找父类,直到Object
System.out.println(son.getAge());
System.out.println(son.hobby);
}
}
class Grandpa{
String name="大头爷爷";
String hobby="旅游";
//int age=100;
//如果这边直接在son.age,还是会报错,除非吧father类中的age注销掉
}
class Father extends Grandpa{//父类
String name="大头爸爸";
private int age=39;//如果写成private,内存中有age,但是无法访问,要提供公共方法进行访问
public int getAge() {
return age;
}
}
class Son extends Father{//子类
String name="大头儿子";
}