首先我会告诉你我的代码:
public class Person {
String _name;
int _age;
public Person(String name, int age){
_name = name;
_age = age;
}
public String toString(){
return "Age:" + _age + ". Name: " + _name;
}
}
public class Principal extends Person{
String _gender;
int _rank;
public Principal(String name, int age, String gender, int rank){
super(name, age);
_gender = gender;
_rank = rank;
}
public String toString(){
return "Age:" + _age + " .Name: " + _name + " .Gender: " + _gender + " .Rank: " + _rank;
}
}
主要:
public class Main {
public static void main(String[] args){
Person me = new Person("Bob", 23);
System.out.println(me);
Principal hj = new Principal("Dan", 39, "Male", 1);
}
}
我无法理解为什么必须在Principal hj = new Principal("Dan", 39, "Male", 1);
中添加前两个参数。 。 。我认为super(name, age);
应该从对象me
继承前两个参数,我只需要应用最后两个参数。
我想念什么?理解?
答案 0 :(得分:1)
我认为超级(姓名,年龄);应该从对象我继承前两个参数,我只需要应用最后两个参数。
这甚至意味着什么? 参数值必须来自某处。
super(...)
只需调用基类构造函数,并使用您要传递给它的任何参数。
答案 1 :(得分:0)
首先,超级(...);会调用超类构造函数,该构造函数接受该数字和类型参数,具体取决于您的超类构造函数。
然后,你混合的东西,你从类继承,而不是从类(对象)的实例,这意味着他们共享属性(每个主要对象都有所有Person对象具有的属性(名称,年龄) ,原则继承自人)。
您没有将Person对象转换为Principal Object(向下转换),因为您可能会遇到意外行为,风险很大。然后你可以做的是两件事,你可以将一个Principal类转换为Person类,然后属性保持不变,你可以使用所有常见的Person属性。
或者,您可以在Princip中创建一个构造函数,它接受一个Person对象,并复制其属性,然后您可以将其称为:
Person m = new Person("David", 12);
Principal hj = new Principal(m, "Male", 1);
希望它澄清!
答案 2 :(得分:0)
很简单,super()
调用父类中的构造函数。
您传递的参数确定调用哪个构造函数。
父类对传递给子类中构造函数的参数一无所知。
答案 3 :(得分:0)
Person me = new Person("Bob", 23);
Principal hj = new Principal("Dan", 39, "Male", 1);
在这里,您将创建两个不同的对象。所以,人“我”是一个不同的对象,校长“hj”是另一个。校长HJ将拥有自己的“实例”Person作为其母公司。因此,您必须将所有参数传递给hj,以便此父人员实例获取其中两个。这就是为什么你打电话给超级。
答案 4 :(得分:0)
super()调用您的父类构造函数,并为您的子类提供或添加属性值。