inh*_*ler 1 java inheritance super
class Person {
public String name;
String id;
public Person() {
System.out.println("Parent default");
name = id = "";
}
public Person(String name, String id) {
System.out.println("Parent parameter");
this.name = name;
this.id = id;
}
void show() {
System.out.println(this.name + "\n" + this.id);
}
}
class Student extends Person {
Student() {}
Student(String a, String b) {
super(a, b);
}
}
class Main {
public static void main(String args[]) {
Person p = new Person("A", "AA");
Student s = new Student("b", "BB");
s.show();
}
}
Run Code Online (Sandbox Code Playgroud)
我对java很陌生,所以我想了解一些基本的东西,但我失败了。如果我从父类继承,这意味着我在子类中获得了父类的副本,对吗?所以,在这段代码中——如果我引用父类的show方法(在 Main 类中),这应该显示父类name和id之前设置的。
但它没有显示——所以我的理解肯定有问题。如何从子类访问父类的副本?使用super子构造函数中的方法?简而言之,我也想了解继承的基础知识。
考虑以下语句:
Person p = new Person("A", "AA");
Run Code Online (Sandbox Code Playgroud)
这是创建一个Person. 它的名字是"A",它的 id 是"AA"。
现在考虑这个陈述:
Student s = new Student("b", "BB");
Run Code Online (Sandbox Code Playgroud)
这是创建一个新的Student. 它还创建了一个新的 Person. 这怎么可能?那么一个Student 是一个Person。这就是继承的意思。当一种类型扩展另一种类型时,即定义了类型之间的“是一个”关系。
狗扩展了动物,因为狗是动物。Car 扩展了 Vehicle,因为 Car 是 Vehicle。
因此,当您创建新Student的Person. Student extends Person,所以 aStudent是 a Person。不足为奇,我可能会补充。
该super关键字用于从其子类引用父类的方法和字段。在你的Student构造函数中
Student(String a, String b) {
super(a, b);
}
Run Code Online (Sandbox Code Playgroud)
您实际上是Person通过调用super(a, b). 所以new Student("b", "BB")创建了一个Personname"b"和 id "BB"。那Person恰好也是一个Student。
还有人之间没有真正的关系,任何"a"与人"b"(尽管他们或许是远房表亲)。如果你问别人"a"她的名字,她会回答"a"。如果你问"b"他的名字,他会回答"b"。一个人用别人的名字回复会有点奇怪,所以每个人都被视为完全不同的人。
另请参阅:Java 继承文档
| 归档时间: |
|
| 查看次数: |
7658 次 |
| 最近记录: |