class A{
private void fun(){
System.out.println("A类中定义的方法。") ;
}
public void print(){
this.fun() ;
}
};
class B extends A {
public void fun(){
System.out.println("B类中定义的方法。") ;
}
};
public class Extends{
public static void main(String args[]){
B b = new B() ;
b.fun() ;
b.print();
}
};
结果:
B类中定义的方法
A类中定义的方法 ——》问:为什么调用父类中的方法,子类不是复写了吗?
private void fun(){
System.out.println("A类中定义的方法。") ;
}
public void print(){
this.fun() ;
}
};
class B extends A {
public void fun(){
System.out.println("B类中定义的方法。") ;
}
};
public class Extends{
public static void main(String args[]){
B b = new B() ;
b.fun() ;
b.print();
}
};
结果:
B类中定义的方法
A类中定义的方法 ——》问:为什么调用父类中的方法,子类不是复写了吗?
private方法,覆盖不了
子类没复写父类任何方法
如果你把A中的private改成public ,就可以说B复写了A中的fun()方法了
那样的话this调用的就是B中复写过的方法了
LZ可以进一步关心一下
A中fun()方法分别是private和public的时候
this.fun()分别调用了谁呢
前者调用的是B类中的fun(),后者本应该调用A中被B继承过来的public公共方法fun()
但B同时又复写了这个方法,所以这种情况下两次输出都是
B类中定义的方法。
这是父类属性对子类的访问控制
这个明确了的话,其实就不用关心父类中private属性到底能不能被子类继承了
不论是否继承过来了访问控制是确定的,也就是说不影响你在子类中使用父类的属性
至于究竟父类中private属性能不能被继承,这点我就不说个人理解了
有些比较模糊甚至对立矛盾的说法,但这没什么意义
因为你会发现不同说法的描述立场是不同的,就比如说对于一个已经完全了解掌握的事物,我们对它内部元素
的某种关系做了一个定义并且其中不同元素发生关系时候我们一定要用这个定义来描述它们之间所有关系的细节一样,是有可能出现分歧的,但这毫无意义
子类和父类难道不是相对的概念么,个人认为“子类和父类”是个完整的概念,如果一定要把这两者拆开的话才涉及到private属性是否被继承这一问题;有父类才有子类,父类一个属性的访问控制符完全确定了这个属性是不是能够被子类直接访问以及怎样访问,既然这点已经确定了干嘛一定要明确把父类私有属性继承过来呢?
注意是A,笔误... (其实应该叫键盘误)
不要把人误导了