如何在Java中从子类创建对象

时间:2015-12-29 16:14:42

标签: java

所以我有这个课程:

public class parent {
     private int id;
     private int row;
     public parent(int id,int row) {
        this.id=id;
        this.row=row
     }
}

然后我有这个扩展父

的类
public class son extends parent {
    public son(int id,int row) {
        super(id,son);
    }
}

问题是如何为类son创建一个对象。我必须这样称呼它:

son x=new son(int id,int row); 

我真的很困惑。

1 个答案:

答案 0 :(得分:5)

是的,你现在就开始了!要绝对清楚,在调用构造函数时,您不会使用idrow的类型,您只需提供该类型的值。

所以这是错误的:

son x = new son(int 5, int 6); //Incorrect

这是正确的:

son x = new son(5, 6); //Correct

您还可以传递正确类型的变量,如下所示:

int id = 5;
int row = 6;
son x = new son(id, row);

另外,我刚注意到你写道:

public class parent {
     private int id;
     private id row;
     //....

而不是

public class parent {
     private int id;
     private int row;  //Note the change id --> int here
     //....

如果这是一个错字,请不要担心。否则你可能会有一个概念上的误解。 id不是一种类型,但int是。row。因此,我们无法将id声明为int,但我们可以将其声明为C。与typedef和朋友不同,您无法使用int创建类型的同义词,因此您仍然坚持使用基本类型(booleanpublic class Parent { private int id; private int row; public Parent(int id,int row) { this.id=id; this.row=row } } public class Son extends Parent { public Son(int id,int row) { super(id,son); } } public class ThisClassHasManyWordsInItAndItShouldBeFormattedLikeThis { //..... } 等等。)

由于您似乎是Java的新手,因此惯例是类具有Pronoun Case(每个单词的大写首字母)名称。因此,为您的类使用以下格式将是更好的风格:

Son x = new Son(5,6);

然后进行构建:

Parent

一旦您构建了Parent p = new Parent(4,5); p对象,就无法将Son更改为p。这是不可能的。 但是,您可以将Son复制到新的public class Parent { private int id; private int row; public Parent(int id,int row) { this.id=id; this.row=row } public int getId() { return id; } public int getRow() { return row; } } public class Son extends Parent { public Son(int id,int row) { super(id,son); } public Son(Parent p) { super(p.getId(), p.getRow()); } } 中,然后您可以对这些类进行一些修改,以便更轻松地制作这些副本:

Parent p = new Parent(4,5);
Son s = new Son(p);  //will have id of 4 and row of 5

现在我们可以创建一个Parent,并将复制到一个新的Son:

Son extends Parent

值得注意的是,虽然这一切对于学习课程扩展如何运作都很好,但你并没有真正正确地使用它。通过说Son,您说Parent public class Person { private Person mother; private Person father; public Person(Person mother, Person father) { this.mother = mother; this.father = father; } } 的一种类型,这在小学模型中是不正确的。一个家族。建模家庭的更好方法可能是:

Man

如果您仍在寻找包含类扩展的方法,那么WomanPerson作为类Man的扩展名有意义,因为Person 是一种 public class Person { private Man father; private Woman mother; public Person(Man father, Woman mother) { this.father = father; this.mother = mother; } } public class Man extends Person { public Man(Man father, Woman mother) { super(father, mother); } } public class Woman extends Person { public Woman(Man father, Woman mother) { super(father, mother); } } 。 (即所有人都是人,而不是所有人都是男人)。

document.getElementById('myButton').onclick = function() {
    this.classList.toggle('active');
}