Да, вы на месте! Чтобы быть абсолютно ясным, вы не использовали бы тип 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);
}
}
Да, вы можете назвать это способом .. Или вы можете использовать ссылку родителя, чтобы обратиться к экземпляру класса сына – TheLostMind
я действительно не нравлюсь строчную класс именования. – OPK
Оставьте типы, но в противном случае ваш синтаксис должен работать. сын x = новый сын (id, row); – nicomp