Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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_Class_Encapsulation - Fatal编程技术网

Java 如果期望父类,但不允许用户实例化父类,我如何接收子类作为参数?

Java 如果期望父类,但不允许用户实例化父类,我如何接收子类作为参数?,java,class,encapsulation,Java,Class,Encapsulation,我是java编程新手,我想得到一些帮助来解决这个问题,下面的代码来说明我的问题,我有一个父类Person,我创建了3个子类Player、Arbiter和Trainer,然后我可以通过期望Person类对象将这3个类中的任何一个作为参数传递给另一个类Game public class Game { private Person member; public Game (Person member){ this.member = new Person();

我是java编程新手,我想得到一些帮助来解决这个问题,下面的代码来说明我的问题,我有一个父类Person,我创建了3个子类Player、Arbiter和Trainer,然后我可以通过期望Person类对象将这3个类中的任何一个作为参数传递给另一个类Game

public class Game {

    private Person member;

    public Game (Person member){
        this.member = new Person();
        this.member = member;
    }
}
我的问题是,除了生成多个构造函数外,如何在使父类抽象的同时实现类似的结果,从而禁止用户创建它的实例,从而实现更多的封装?

使Person类抽象

您可以在此阅读更多关于这意味着什么的内容:


但最基本的一点是抽象类不能被实例化,但它们可以被子类化。

这个问题对我来说很不清楚。您想禁止用户创建游戏对象吗?如果是这样,a可能是合适的。-构造函数上的参数似乎多余,因为您不使用它。@Turing85抱歉,我只是想让它尽可能简单,我不允许用户创建Person类对象,同时也能够使用它们作为参数接收从中扩展的3个子类中的任何一个子类。用户能否实例化这些子类的新实例?是的,我希望用户能够创建子类的实例,以便在游戏类中使用,但不允许他们在Game的构造函数之外创建Person类的实例将Game的构造函数重写为公共Game Person成员{this.member=member;},并将Person的构造函数设置为protected。您已经可以将所有子类传递给构造函数。您可以阅读有关访问修饰符的更多信息。