0 java inheritance constructor
当我将此代码更改为Member m1 = new Member ();它完美无缺.为什么它不适用于超类参考?请有人解释一下吗?
public class Family {
String Surname = "Richard";
String Address = "No:10, High Street,Colombo";
}
public class Member extends Family{
String Name;
int age;
public void Details() {
System.out.println("full Name ="+ Name +" "+ Surname);
System.out.println("Age =" +age);
System.out.println("Address =" + Address);
}
public static void main(String[] args) {
Member m1 = new Family ();
m1.Name="Anne";
m1.age=24;
m1.Details();
}
Run Code Online (Sandbox Code Playgroud)
您没有超类引用.你有一个子类引用持有对超类对象的引用,这完全是非法的.
其次,如果要查看多态性生效,还需要在超类中定义子类中的方法.您只能在超类引用上调用该方法,超类引用也在超类中定义.
所以,你基本上需要这个: -
Family m1 = new Member();
Run Code Online (Sandbox Code Playgroud)
然后定义的details()方法(是的,方法名应该以小写字母开头),在你的Family班级.
现在,当您尝试访问其中的字段时,您将收到另一个编译器错误Member.为此,最好在类中使用2-arg构造函数Member,并从该构造函数中调用2-arg超级构造函数(需要显式执行此操作),或者0-arg超级构造函数(这是隐式的)
public Member(String name, int age) {
this.name = name;
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
并使用此构造函数来创建对象.它将隐式调用0-arg超级构造函数以使用其默认值初始化其字段.如果你想给它们一个值,你可以在类中使用4-arg构造函数,Member为超类字段传递2参数,然后从那里调用超类2-arg构造函数.
我认为,你应该从一个好的教程开始,从学习一般的继承,访问说明符开始,然后继续进行多态.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |