java中私有属性能不能被继承?
以前的课堂中,老师讲继承的时候说过:子类可以继承父类中的属性和方法。可是当我们写代码的时候却能出现一些不一样的情况。
其原因在什么地方?之后通过代码的验证发现出现在了private的访问控制权限上面,也就只有private的访问控制权限能出现问题。
那为什么private能出现矛盾呢?我们来看:private:私有的,只能在自己本类中使用。而继承是子类继承了父类中的属性和方法。
我们在这两个解释中发现了问题:私有属性能不能被继承的?
针对此问题,我们先来看代码:
class Person {
private String name = "wanghan";
private void print() {
System.out.println("执行的是父类中的方法!");
}
public void fun(){
this.print();
System.out.println(this.name);
}
class Student extends Person {
void print() {
System.out.println("执行的是子类中的方法!");
}
}
public class Main {
public static void main(String[] args) {
new Student().fun();
}
}
执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe"...
执行的是父类中的方法!
wanghan
Process finished with exit code 0
私有属性不能继承,但是可以通过子类继承父类的方法来访问父类的私有属性。
在上述的代码中,分别有一个私有的属性和方法。通过父类中的方法对私有属性进行访问,同理,私有方法我们也是通过父类的方法进行了访问。而在子类中也创建了一个与父类私有方法名字相同,且访问控制权限进行了扩大的一个方法,按理来说应该是子类中的方法对父类中的私有方法进行了覆写,可事实是执行了父类中的私有方法。也就是说子类并没有覆写父类中的私有方法,这是在子类中创建了一个新的方法。所以,父类的访问控制权限是 private 时,子类的访问控制权限是protected或者时public时。此时这也不是方法的覆写。
也就是说用private声明的方法不能被子类覆写,但可以通过父类的方法调用