在处理继承时标识java对象的类型
我被分为4节课,如下所示在处理继承时标识java对象的类型,java,inheritance,Java,Inheritance,我被分为4节课,如下所示 public abstract class TennisPlayer{...} public class GoodPlayer extends TennisPlayer{...} public class WeakPlayer extends TennisPlayer{...} public class Beginner extends WeakPlayer{...} TennisPlayer g = new GoodPlayer("Sam"); TennisPlay
public abstract class TennisPlayer{...}
public class GoodPlayer extends TennisPlayer{...}
public class WeakPlayer extends TennisPlayer{...}
public class Beginner extends WeakPlayer{...}
TennisPlayer g = new GoodPlayer("Sam");
TennisPlayer w = new WeakPlayer("Harry");
TennisPlayer b = new Beginner("Dick");
我还收到了3份声明,如下所示
public abstract class TennisPlayer{...}
public class GoodPlayer extends TennisPlayer{...}
public class WeakPlayer extends TennisPlayer{...}
public class Beginner extends WeakPlayer{...}
TennisPlayer g = new GoodPlayer("Sam");
TennisPlayer w = new WeakPlayer("Harry");
TennisPlayer b = new Beginner("Dick");
所以我的问题是,上面创建的每个对象的类型是什么,为什么?例如,第一条语句,Sam是GoodPlayer类型还是TennisPlayer类型?
g
将是GoodPlayer
——您可以通过运行g.getClass()
找到这一点,它将为您提供GoodPlayer.class
。但是这里声明的类型是TennisPlayer
,这意味着您只能调用TennisPlayer
类或超类上声明的方法。g
的类型是GoodPlayer
——您可以通过运行g.getClass()
找到这一点,它将为您提供GoodPlayer.class
。然而,这里声明的类型是TennisPlayer
,这意味着您只能调用TennisPlayer
类或超类上声明的方法。在这种情况下,Sam将是一个优秀的玩家类型。您可以初始化一个变量,然后用该对象的子对象实例化。您也可以通过接口实现这一点,例如,您可以实现Map sampleMap=newhashmap();您可以使用instanceOf方法来验证这一点
if (g instanceof GoodPlayer) {
System.out.println("Sam is a GoodPlayer");
}
在这种情况下,山姆将是一个优秀的球员类型。您可以初始化一个变量,然后用该对象的子对象实例化。您也可以通过接口实现这一点,例如,您可以实现Map sampleMap=newhashmap();您可以使用instanceOf方法来验证这一点
if (g instanceof GoodPlayer) {
System.out.println("Sam is a GoodPlayer");
}
由于类GoodPlayer、WeakPlayer和初学者扩展了类Tennisplayer,因此它们都继承了Tennisplayer类的属性。所以,当你实例化一个变量,比如
Tennisplayer g = new GoodPlayer("Sam") ;
“Sam”属于GoodPlayer类型,但继承了TennisPlayer类的属性
由于网球运动员的类型太多,我们可以创建子类来扩展TennisPlayer类。然而,所有网球运动员都有一些相同的属性,比如身高。因此,我们将为TennisPlayer类中的高度定义一个变量,并且每个子类都能够实现该变量。我们可以使一些属性成为子类的专有属性。例如,优秀玩家的属性可能对弱者或初学者来说毫无意义
这就是多态性。如果你用谷歌搜索“Java多态性”,你可以找到大量的信息。由于GoodPlayer、WeakPlayer和初学者扩展了Tennisplayer类,它们都继承了Tennisplayer类的属性。所以,当你实例化一个变量,比如
Tennisplayer g = new GoodPlayer("Sam") ;
“Sam”属于GoodPlayer类型,但继承了TennisPlayer类的属性
由于网球运动员的类型太多,我们可以创建子类来扩展TennisPlayer类。然而,所有网球运动员都有一些相同的属性,比如身高。因此,我们将为TennisPlayer类中的高度定义一个变量,并且每个子类都能够实现该变量。我们可以使一些属性成为子类的专有属性。例如,优秀玩家的属性可能对弱者或初学者来说毫无意义
这就是多态性。如果你在谷歌上搜索“Java多态性”,你可以找到大量的信息