2015-12-29 4 views
0

Так у меня есть этот класс:Как создать объект из подкласса в 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.Do я должен назвать это следующим образом:

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

Я действительно смущен.

+0

Да, вы можете назвать это способом .. Или вы можете использовать ссылку родителя, чтобы обратиться к экземпляру класса сына – TheLostMind

+2

я действительно не нравлюсь строчную класс именования. – OPK

+0

Оставьте типы, но в противном случае ваш синтаксис должен работать. сын x = новый сын (id, row); – nicomp

ответ

5

Да, вы на месте! Чтобы быть абсолютно ясным, вы не использовали бы тип id и row при вызове конструктора, вы просто указали бы значения этого типа.

Так что это не так:

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, boolean и т. Д.).


Поскольку кажется, что вы новичок в Java, конвенция для классов, чтобы иметь местоимение Case (капитализированные первую букву каждого слова) имена. Таким образом, было бы лучше стиль использовать следующее форматирование для ваших классов:

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); 
    } 
} 

public class ThisClassHasManyWordsInItAndItShouldBeFormattedLikeThis { 
    //..... 
} 

Что тогда делает конструкцию:

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 

стоит отметить, что в то время как все это хорошо для обучения, как работает расширение класса, вы на самом деле не используя I t совершенно правильно. Говоря 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 и Woman имеет смысл в качестве расширений класса Person, потому что 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); 
    } 
} 
+0

Да, я довольно новичок в Java. Спасибо за aswer, но допустим другой сценарий. Я создаю родительский объект Родитель x = новый родитель (5,6); Как создать объект из Son, сохраняющий те же переменные, что и input? Не существует способа сделать этот объект без необходимости вставлять эти переменные? – Jenny

+0

Aha! Нет, не напрямую. Но вы можете сделать там один. Сейчас я отредактирую свой ответ. – Mshnik

+0

Да, это было то, что я хотел сделать с самого начала! – Jenny

Смежные вопросы