我有4节课,如下所示。
public abstract class TennisPlayer{...}
public class GoodPlayer extends TennisPlayer{...}
public class WeakPlayer extends TennisPlayer{...}
public class Beginner extends WeakPlayer{...}
我还获得了3个声明,如下所示。
TennisPlayer g = new GoodPlayer("Sam");
TennisPlayer w = new WeakPlayer("Harry");
TennisPlayer b = new Beginner("Dick");
所以我的问题是上面创建的每个对象的类型是什么?为什么?例如,第一个声明,Sam会输入GoodPlayer还是输入TennisPlayer?
答案 0 :(得分:1)
g
的类型为GoodPlayer
- 您可以通过运行g.getClass()
来找到这个,这会给您GoodPlayer.class
。但是这里声明的类型是TennisPlayer
,这意味着你只能调用在TennisPlayer
类或超类上声明的方法。
答案 1 :(得分:1)
在这种情况下,Sam将成为GoodPlayer类型。您可以初始化变量,然后使用该对象的子实例进行实例化。您也可以使用接口执行此操作,例如,您可以执行Map sampleMap = new HashMap();您可以使用instanceOf方法验证此
if (g instanceof GoodPlayer) {
System.out.println("Sam is a GoodPlayer");
}
答案 2 :(得分:0)
由于GoodPlayer,WeakPlayer和Beginner类扩展了Tennisplayer类,它们都继承了TennisPlayer类的属性。因此,当您实例化一个变量,如...
Tennisplayer g = new GoodPlayer("Sam") ;
"萨姆"是GoodPlayer类型,但继承了TennisPlayer类的属性。
由于可以有这么多类型的网球运动员,我们可以创建子类来扩展TennisPlayer类。但是,所有网球运动员都会有一些相同的属性,例如身高。因此,我们将在TennisPlayer类中为高度定义一个变量,并且每个子类都能够实现该变量。我们可以为子类创建一些独有的属性。例如,GoodPlayer可能具有对WeakPlayer或初学者没有意义的属性。
这只是多态性。如果您使用Google" Java多态性"。
,您可以找到大量信息