java继承

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)

Roh*_*ain 7

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

其次,如果要查看多态性生效,还需要在超类中定义子类中的方法.您只能在超类引用上调用该方法,超类引用也在超类中定义.

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

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构造函数.

我认为,你应该从一个好的教程开始,从学习一般的继承,访问说明符开始,然后继续进行多态.