通过构造函数将子类中的变量添加到超类

时间:2013-10-16 19:29:42

标签: java subclass abstract superclass

我有一个抽象类A,我可以说3个变量,String username,String password,char sex。在这个类中,我有一个构造函数来创建具有所有这些变量的该类的Object。

我还有另外两个扩展A类的B和C类,每个类都将它们的一个变量添加到Object Person中。即B类应该添加一个变量isAdmin,C类应该添加一个变量isUser。

我试图用构造函数创建它,但我不想将类B和C中的任何变量添加到A中,我只是想在它们的类中单独创建这些变量并且如果我调用构造函数从这些类B或C中,将其中一个变量添加到对象用户。

public class abstract class A {
private String name;
private String password;
private char sex;
public A(String name, String password, char sex){
this.name = name; this.password = password; this.sex = sex;}
}

public class B extends A {
public int isUser = 1;
public B(String username, String password, char sex){
super(username, password, sex)}
}

这甚至可能吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

but I don't want to add any of the variables from classes B and C to A, I just want
to create these variables in their classes separately

这就是继承的目的!

Is that even possible?

是的,这完全有效。

I've tried it, but if I put the int isUser in the constructor of the class B I will get
an error, because in the superclass constructor I have 3 variables, and in the class B
constructor I have 4 of them. That is the problem

您只需要在类B中使用isUser实例变量。因为在A类中不需要使用此变量,所以不需要在构造函数中使用它。你可以做类似下面的事情

public class B extends A {
public int isUser = 1;
public B(String username, String password, char sex,int isUser){
super(username, password, sex);
this.isUser = isUser;}
}

答案 1 :(得分:0)

您必须在A类中创建空构造函数:

protected A(){}

然后你可以打电话给你的B和C课:

super()

如果不存在构造函数,则在创建新对象时,会自动创建空构造函数。但是,如果存在某些构造函数,则不会自动创建构造函数,因此如果您需要空构造函数,则必须手动添加它。

I've tried to make it with constructors, but I don't want to add any of the variables from classes B and C to A

我不确定,如果你理解了遗产。如果你有B扩展A,则意味着,当你创建实例B时,它具有所有具有类A的方法和属性。但是实例B将是实例B,将没有实例A.它将是实例B, A级和B级的属性。