0

当我将此代码更改为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();

}
4

1 回答 1

7

您没有超类参考。您有一个子类引用持有对超类对象的引用,这完全是非法的。

其次,如果你想看到多态性生效,你需要在子类中定义你在超类中的方法。您只能在超类引用中调用该方法,该方法也在超类中定义。

所以,你基本上需要这个: -

Family m1 =  new Member();

然后在你的类中定义details()方法(是的,方法名称应该以小写字母开头) 。Family

现在,当您尝试访问Member. 为此,最好在类中使用2-arg 构造函数Member,并从该构造函数调用2-arg 超级构造函数(您需要显式执行此操作)或0-arg 超级构造函数(这是隐式的)

public Member(String name, int age) {
    this.name = name;
    this.age = age;
}

并使用此构造函数创建对象。它将隐式调用0-arg 超级构造函数以使用其默认值初始化它的字段。如果要给它们一个值,可以在类中使用4-arg 构造函数Member,传递超类字段的 2-参数,然后从那里调用超类2-arg 构造函数。

我认为,您最好从一个好的教程开始,从一般的继承、访问说明符开始,然后继续学习多态性。

于 2013-02-10T07:00:41.933 回答