JAVA为什么说抽象类是实现多态的一种途径。
3个回答
展开全部
其实这个问题我是这样理解的。
首先我来给你举个例子:一个抽象的乐器类abstract Instrument.它里面有一个抽象的方法abstract void play();(提醒一下,没有方法体)。
然后有其它的几个不同的乐器(比如Wind、Percussion、Stringed)来继承了前面的乐器抽象类,你应该知道,继承一般要重写基类的方法并实现,所以Wind、Percussion、Stringed都需要去重写play方法。
比如Wind重写后是这样的public void paly() {System.out.println("这是Wind的play().")}。Percussion重写后是这样的public void paly() {System.out.println("这是Percussion的play().")}。Stringed重写后是这样的public void paly() {System.out.println("这是Stringed的play().")}。
你实例化类Wind、Percussion、Stringed的对象,它们的引用分别为W,P,S。
此时你这样调用W.play();P.play();S.play();
出来的结果分别是:这是Wind的play().这是Percussion的play().这是Stringed的play().
你看,这样就实现了多态。所以说抽象类是实现多态的一种途径。我就是这样理解的。
首先我来给你举个例子:一个抽象的乐器类abstract Instrument.它里面有一个抽象的方法abstract void play();(提醒一下,没有方法体)。
然后有其它的几个不同的乐器(比如Wind、Percussion、Stringed)来继承了前面的乐器抽象类,你应该知道,继承一般要重写基类的方法并实现,所以Wind、Percussion、Stringed都需要去重写play方法。
比如Wind重写后是这样的public void paly() {System.out.println("这是Wind的play().")}。Percussion重写后是这样的public void paly() {System.out.println("这是Percussion的play().")}。Stringed重写后是这样的public void paly() {System.out.println("这是Stringed的play().")}。
你实例化类Wind、Percussion、Stringed的对象,它们的引用分别为W,P,S。
此时你这样调用W.play();P.play();S.play();
出来的结果分别是:这是Wind的play().这是Percussion的play().这是Stringed的play().
你看,这样就实现了多态。所以说抽象类是实现多态的一种途径。我就是这样理解的。
参考资料: Think in Java Fourth Edition
展开全部
因为抽象类必须要继承之后才能使用,这样的实际使用时就可能用父类引用变量来引用子类对象了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
继承抽象类的不同子类在实现抽象类中的方法时,使用不同的方式(方法中代码不同)
然后统一用抽象类对象来引用不同子类对象,调用相同的方法,出现的效果不同,这不就是多态。
其实接口也是类似的原理,只不过接口中不能包含attribute罢了
然后统一用抽象类对象来引用不同子类对象,调用相同的方法,出现的效果不同,这不就是多态。
其实接口也是类似的原理,只不过接口中不能包含attribute罢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询