你这里就是LX3_7_p sn=new LX3_8("aa",34,"bb","cc")将子类的引用赋给了父类,那么这个引用现在能调用到子类重写过的父类的方法以及父类的方法(这里好瞎我不知道该怎么说了,就是这样父类中有print()方法,子类中也就print()方法,并且返回类弄和参数都一样的话,就是重写了父类的方法,那么这时候用sn可以调用到print()方法,但这个方法不是父类的而是子类的),
而不能调用到子类中没有重写父类的方法(这里父类方法为PIRNT(),子类方法为PRIN()),所以sn根本调用不到子类的方法prin()不报错才怪
然后你将子类中的prin()改成print()这就相当于重写了父类的方法,在用sn调用时父类的方法被告覆盖,会调用到子类的print()方法.
不是引用出错啦,只是现在这个sn调用不到子类的prin()方法,你如果用LX3_8产生一个对象友搜空调用prin()是不会出现这种问题的啦.
class Ball {public void play() {
System.out.println("玩球儿晌烂...")
}
}
class Football extends Ball {
public void play() {
System.out.println("使用足球运动")
}
}
class Basketball extends Ball {
public void play() {
System.out.println("宴运漏使用篮球运动")
}
}
public class TestMain {
public static void main(String[] args) {
TestMain tm = new TestMain()
tm.testPlay()
}
public void testPlay() {
Ball ball = new Football()
ball.play()
ball = new Basketball()
ball.play()
}
}
/*
D:\>javac TestMain.java
D:\>java TestMain
使用足球运动
使用篮球悄凯运动
*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)