1、Java继承关系中成员变量的使用特点:
遵循“就近原则”,局部位置有就使用,
没有就去本类的成员位置找,有就使用,
没有就去父类的成员位置找,有就使用,没有就报错。
public class Fruit {
int price = 20;
}
public class Apple extends Fruit {
int price = 10;
public void showPrice() {
int price = 5;
System.outprintln(price); //5
System.outprintln(this.price); //10
System.outprintln(super.price); //20
}
}
public class Test {
public static void main(String args[]) {
Apple apple = new Apple();
apple.showPrice();
}
}
上述代码中,第九行代码打印值为5;
若将第八行注释掉,则打印值为10;
若继续将第六行注释掉,则打印值为20;
若将第二行注释掉,则系统报错。
默认打印的是离自己最近的值。
如果在上述情况下想要调用本类的成员变量,需要使用this关键字;
如果想要调用父类的成员变量,则需要使用super关键字。
2、Java继承关系中成员方法的使用特点:
方法重写:
子类中出现与父类一模一样的方法时(子类方法的权限修饰符不小于父类方法,返回值类型、方法名和参数列表相同),会出现覆盖操作,也称为重写或者复写。
父类私有方法,子类看不到,因此父类私有方法的重写也就无从谈起。
重写注意事项:
子类方法的权限修饰符不小于父类方法。
静态只能覆盖静态。
覆盖的使用场景:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法。
这样,既沿袭了父类的功能,又定义了子类特有的内容。
方法重写和重载有什么区别?
方法的重写用在子类方法与父类方法一模一样时,除权限修饰符以外,返回值类型、方法名和参数列表都是相同的。
重载用在同一个类中各方法方法名相同,参数列表不同(与返回值类型没有关系)的情况。
子父类中构造方法的用法:
1、子类的初始化过程中,首先回去执行父类的初始化动作。
因为子类的构造方法中默认有一个super()。
2、如果父类没有无参构造方法:
- 使用super调用父类的带参构造。(推荐方式)
- 使用this调用本身的其他构造。
静态代码块、构造代码块,构造方法的执行顺序:
父类静态代码块→子类静态代码块→父类构造代码块→父类构造方法→子类构造代码块→子类构造方法