public class Animal1 {
public void p1(){
System.out.println("我是父类方法");
}
public static void main(String[] args){
Animal1 a=new shizi();//问题,这个语句执行后,为什么不能调用子类shizi的p方法,只能调用父类animal的p1方法,我看书上说子类shizi应该是继承了p1方法,并且调用方法时候是根据运行时类型决定的
//shizi a=new shizi();
//System.out.println(a.a);
}
}
class shizi extends Animal1{
public String a="123";
public void p(){
System.out.println("我是子类方法");
}
}
问题:
你使用了父类的引用,就会失去子类的属性,还有你那个p,根本就不是继承,名字都不一样,如果名字一样,是继承的方法,调用时,其实是执行了子类的方法。这就是多态性,子类不同,执行的内容也不相同。
默默点个攒
@朝曦: 再加一个赞~
因为Animal1 a=new shizi(); a的类型是Animal1
Animal1 a=new shizi();
((shizi)a).p()
java里可以这么搞呀 如果是C#那new的时候就应该需要强转了
C#也可以这么搞,C#的语法明显比Java先进很多。这就是一个简单的隐式类型转换而已。