Can';我不懂super';Java中的s功能
首先,我将向您展示我的代码:Can';我不懂super';Java中的s功能,java,inheritance,super,Java,Inheritance,Super,首先,我将向您展示我的代码: 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 Perso
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)中添加前2个参数代码>。我认为super(姓名、年龄)
应该从对象me
继承前两个参数,我只需要应用最后两个参数
我错过了什么
我觉得超级(名字,年龄);应该从对象me继承前两个参数,而我只需要应用最后两个参数
这到底是什么意思?
参数值必须来自某个地方
super(…)
只需调用基类构造函数,并使用您想要传递给它的任何参数。首先,什么是super(…);根据您的超类构造函数的不同,调用采用该数字和类型参数的超类构造函数
然后,你在混合东西,你从类继承,而不是从类(对象)的instace继承,这意味着它们共享属性(每个principle对象都有Person对象所拥有的属性(名称、年龄),就像principle从Person继承一样)
您不能将Person对象转换为Principal对象(向下转换),因为您可能会有意外行为,这是有风险的。然后你可以做两件事,你可以把一个主体类向上转换成一个人类,然后属性保持不变,你可以使用所有普通人属性
或者,您可以在principal中创建一个构造函数,它接受Person对象并复制其属性,然后您可以将其称为:
Person m = new Person("David", 12);
Principal hj = new Principal(m, "Male", 1);
希望澄清 非常简单,super()
调用父类中的构造函数
传递的参数决定调用哪个构造函数
父类对传递给子类中构造函数的参数一无所知
Person me = new Person("Bob", 23);
Principal hj = new Principal("Dan", 39, "Male", 1);
在这里,您将创建两个不同的对象。所以,人“我”是另一个对象,主体“hj”是另一个对象。校长HJ将有自己的“实例”作为父母。因此,您必须将所有参数传递给hj,以便该父person实例获得其中两个参数。这就是为什么你叫“超级”的原因。没什么难事
super()调用父类构造函数,并为子类提供或添加属性值。如果不指定这些参数,Java应该从何处获取它们?me
和hj
之间绝对没有任何关系。使用\u
作为标识符的第一个字母会伤害我的眼睛。@SotiriosDelimanolis这就是我一直在问自己的问题,但我也被超级(…)的目的绊倒了如果我在你的代码中重新指定参数,如果你认为Person对象和Pricipal对象有某种自动创建的关系,那就不对了。“我”和“hj”在你的代码中是完全不同的对象。我同意:那些下划线太可怕了。。。因为缺乏压痕。