*父类的引用可以访问子类的方法吗
abstract class Animal {
private String name;
Animal(String name) {this.name = name;}
public void enjoy(){
System.out.println( "叫声...... ");
}
public abstract void enjoy();
}
abstract class Cat extends Animal {
private String eyesColor;
Cat(String n,String c) {
super(n);
eyesColor = c;}
public void enjoy() {
System.out.println( "猫叫声...... ");
}
public abstract void enjoy();
}
class Lady {
private String name;
private Animal pet;
Lady(String name,Animal pet) {
this.name = name;
this.pet = pet;
}
public void myPetEnjoy(){
pet.enjoy(); //传递的是Cat型的c,但这个pet不是Animal类型的吗?又没有强制转换为什么输入的是 "猫叫声 "呢,而不是 "叫声 "呢,父类引用不是不可以访问子类的变量和方法吗?
}
}
public class Test {
public static void main(String args[]){
Cat c = new Cat( "catname ", "blue ");
Lady l1 = new Lady( "l1 ",c);
l1.myPetEnjoy();
}
}
------解决方案--------------------1.首先如果你想把Animal Cat写成abstract ,那你类里面得抽象方法就不能用enjoy这个名字,因为你已经写了一个enjoy的实例方法,不能同名。例如你可以将那个实例方法改成enjoy1。
2.你是传入的一个Cat的对象,所以调用的enjoy方法肯定是子类的,当你改变了Cat里enjoy方法的名字后,输出的是“叫声”,那是因为你调用了父类的enjoy方法。
子类可以调用父类的方法。但父类不能调用子类的。