Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在处理继承时标识java对象的类型_Java_Inheritance - Fatal编程技术网

在处理继承时标识java对象的类型

在处理继承时标识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

我被分为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");
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多态性”,你可以找到大量的信息