普通属性
子类可以继承父类的属性值,后续操作互不影响。
静态属性:
public class Main7 extends Father{
//static int test = 11;
public static void main(String[] args) {
test++;
Father father = new Father();
System.out.println(test);
}
}
class Father{
static int test = 1;
public Father() {
System.out.println(test);
}
}
输出结果: 2 2
除掉注释的结果:1 12
JAVA 中如果继承的父类中存在静态变量,多个子类操作的还是同一个静态变量地址,因此子类的操作是要相互覆盖的。
如果子类重写了父类的方法和静态变量则专属子类了,其它子类的操作也就不会相互覆盖了。此时继承自父类的静态变量会隐藏起来,可以通过父类的类名进行访问。
私有属性
在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。子类不能直接访问父类的私有属性,子类只能在父类中写一个public的getXXX的方法来获取父类中的private属性,子类就调用父类的getXXX来获取private属性。