更新时间:2022-09-09 10:56:50
在Java中,覆盖是针对继承才有的概念,某一个子类需要某些方法或属性,但又不想使用父类中的同名的方法或属性,就需要使用覆盖。
直白的来说,就是在子类中编写与父类同名、同参数、同返回值的方法,或同名、同类型的属性,子类对象调用该方法/属性时,运行的是子类的方法,而不会执行父类的方法(除非在方法第一行写super();会先执行父类方法,再继续执行子类代码。)
了解类的构造函数看这里:类、对象到底有什么秘密
了解更多继承看这里:java类的继承有什么意义
了解类的构造函数看这里:类、对象到底有什么秘密
当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况
了解更多java变量看这里:局部变量、类变量、实例变量有什么区别
class SuperClass {
private int number;
public SuperClass() {
this.number = 0;
}
public SuperClass(int number) {
this.number = number;
}
public int getNumber() {
number++;
return number;
}
}
class SubClass1 extends SuperClass {
public SubClass1(int number) {
super(number);
}
}
class SubClass2 extends SuperClass {
private int number;
public SubClass2(int number) {
super(number);
}
}
public class SubClass extends SuperClass {
private int number;
public SubClass(int number) {
super(number);
}
public int getNumber() {
number++;
return number;
}
public static void main(String[] args) {
SuperClass s = new SubClass(20);
SuperClass s1 = new SubClass1(20);
SuperClass s2 = new SubClass2(20);
System.out.println(s.getNumber());
System.out.println(s1.getNumber());
System.out.println(s2.getNumber());
//结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法
//结论二:当子类覆盖父类的实例变量时,父类方法使用的是父类的 实例变量,子类方法使用的是子类的实例变量
}
}
输出结果:
1
21
21
原文地址:http://blog.csdn.net/ooppookid/article/details/51203923