extends继承:
- 提高了代码的复用性
- 提高了代码的维护性
- 让类与类产生了关系,是多态的前提
- 弊端:类的耦合性增强了
开发的原则:高内聚(自己能做的自己做),低耦合
java中类的继承特点:
- 只支持单继承,不支持多继承(一个儿子只能有一个爹)
- 支持多层继承(父、子、孙)
- 如果想用这个体系的所有功能用最底层的类创建对象
- 如果想看这个体系的共性功能,看最顶层的类
继承注意事项:
- 子类只能继承父类所有非私有的成员变量和方法
- 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
- 不要为了部分功能而去继承
继承中成员变量的关系:
- 若父类与子类有相同的成员变量,则子类对象调用时就调用子类的成员变量(就近原则)
- 若父类与子类有相同的成员变量,则在成员变量前加上super就可以在子类对象调用时就调用父类的成员变量
- 若父类与子类有相同的成员变量,则在成员变量前加上this就可以在子类对象调用时就调用子类的成员变量
this和super的区别:
- this可以访问自己的成员变量,若本类没有这个成员变量,也可以访问父类的成员变量
- super只能访问父类的成员变量
在每一个类中构造方法里面都会有一个默认的super()方法,子类调用构造方法时都会先调用父类的构造方法
子类中所有构造方法都会默认访问父类的空参的构造方法,若自己给出super(参数);则会访问父类有参的构造方法,当父类成员变量私有时,可以通过super(参数);通过有参构造方法向父类有参构造方法传递参数;也可以通过子类无参构造方法定义super(变量赋值的名字);向父类有参构造方法传递值;也可以通过子类无参构造方法定义this(变量赋值的名字);先向子类有参构造方法中再定义super(参数);传值(this可以调用本类其他构造方法),再向父类有参构造方法传递值。
注:构造函数中有super和this不能共存,this和super必须放在构造函数的第一行,子类必须会访问父类的构造方法。
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System .out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.pringtln("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}
class Extends1 {
public static void main(String[] args) {
Zi z = new Zi();
/*
1.Extends1加载进内存
2.主方法进栈
3.需要执行Zi z = new Zi();这句话,但是在内存还没有加载Zi.class
4.Zi继承了Fu,所以Fu.class先加载进内存,同时父类的静态代码块也加载进内存
5.Zi.class加载进内存,同时子类的静态代码块也加载进内存
6.执行子类的构造方法,子类构造方法中隐藏着super(),super()会访问父类的构造方法
7.在父类构造方法执行之前,会先看是否有构造代码块,有先执行构造代码块
8.执行父类构造方法
9.执行子类构造方法,在执行前会看是否有构造代码块,有就先执行
10.执行子类构造方法
*/
}
}
//运行结果
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi