父类变量引用子类实例时,调用的方法一定是子类覆盖父类的方法或者其继承父类的方法?

public class Animal {
private void show() {
System.out.println("父类的私有方法");
}

public void bark() {
    System.out.println("动物叫");
}

public static void main(String[] args) {
    Animal animal = new Cat();
    animal.show();
}

}

class Cat extends Animal {
public void bark() {
System.out.println("猫叫");
}

}

4个回答

animal.show(); 这里引用的是父类的私有方法,而子类不能继承父类的私有方法,所以程序的输出结果应该是“父类的私有方法”。不过可以通过反射机制来访问父类的私有方法。应该是这样的,我也没测试,LZ可以测试一下。有问题再解决。

caicaicai2012
caicaicai2012 是这样的。但是你用了反射,那就无视私有这一语法了。所以我觉得通过反射来调用,应该不是楼主想问的东西
大约 4 年之前 回复

私有的不行,你在非本类中调用会报错的

Animal animal = new Cat();
就以这个为例子。
你这里虽然声明的事Animal,但是它的实例对象使用Cat去实现的,所以当你调用animal.show();时,肯定是调用子类的实现方法。不过你这里父类采用的是私有的方法,那么你子类将无法继承,所以你这段代码执行时会报错

你父类采用的是私有的方法,只有父类自己可以调用,子类不行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!