所以我有一个超类,我希望从中实例化多个子类。子类可能是多线程的 E.g:
public class Person() {
protected variables;
public/private methods ect.
}
public class Man() extends Person {
private variables;
public/private methods;
}
public class Woman() extends Person {
private variables;
public/private methods;
}
我想实例化Person,然后将Man和Woman类扩展出来。
像:
Person A = new Person();
Man B = //some how extends A;
Woman C = //some how extends A;
还是有其他方法可以达到同一目标吗?
答案 0 :(得分:1)
您误解了类和对象之间的区别。类是对象如何组成的总体定义。对象是一个特定的实例。
因此,如果您创建Person
的实例,那就是Person
类的单个对象实例。您无法动态扩展它以在运行时将其作为Man
(有些模式可以执行此操作,但不能继承)。如果您想要Man
,则可以创建一个实例。
也许你真正的问题是不同的。也许您想使用Person的实例作为模板来创建Man
和Woman
的新实例。
想象一下
class Person {
private String name;
public Person(String name) { ... }
}
和一个原型人:
Person kelly = new Person ("Kelly");
也许你想制作一个通用的“凯莉”作为一个男人和一个女人的副本 - 两个独立的对象,恰好有这个性别中立的名字
Man kellyMan = new Man(kelly);
Woman kellyWoman = new Woman(kelly);
我们在上面看到了什么?我们正在看一个复制构造函数模式。原始Person
对象的内容可以复制到新的Man
或Woman
对象中,然后这些对象将继续进行自己的生活。例如:
class Man : extends Person {
public Man(Person template) {
super(template); // pass to superclass for copying
}
}
class Person {
...
public Person(Person template) {
this.name = template.name;
// etc
}
}
这不是一种不常见的事情。在运行时动态更改对象的类型并不常见......我尝试了一次。不要这样做!
答案 1 :(得分:0)
如果你想继承一个类:
public class Child extends Parent { ...
您可以拥有多个从同一父级继承的子类,您只能从多个类继承。以下是您可以使用的一些示例。请记住,当您编写类似Person p = new Person()
的内容时,您有p
这是对Person
对象的引用。尝试将对象类型与不同的引用混合在一起,看看会发生什么。