定义一个Student类,继承Person类,定义name属性,重写Student的构造方法,在该构造方法中输出this.name、base.name、name三个变量的值,比较三个值的区别。 在Main方法中创建Student对象,观察输出的结果。
时间: 2024-10-23 12:02:12 浏览: 29
首先,我们来定义一个`Person`类作为基础类,并包含一个通用的`name`属性:
```java
public class Person {
private String name;
public Person(String name) {
this.name = name;
System.out.println("Base name: " + name);
}
// getter and setter for name...
}
```
然后,我们定义`Student`类,它继承自`Person`类并重写了构造方法:
```java
public class Student extends Person {
public Student(String name) {
super(name); // 调用父类的构造方法,将name传递给父类
this.name = name; // 子类有自己的name属性
System.out.println("This student's name: " + name);
// 输出三个名称的区别,说明了继承和构造函数的关系
System.out.println("Difference: Base name is from Person, this one is from Student.");
}
}
```
在`main`方法中,我们可以创建一个`Student`对象并观察输出结果:
```java
public static void main(String[] args) {
Student student = new Student("Alice");
// 输出:
// Base name: Alice
// This student's name: Alice
// Difference: Base name is from Person, this one is from Student.
}
```
这里的关键点在于,当我们通过`Student`类实例化对象时,虽然调用了父类的构造方法,但同时也会执行子类的构造方法,因此会看到两次关于`name`的输出,一次来自父类构造方法(`base.name`),一次来自子类的成员变量(`this.name`)。这展示了继承和构造方法重写的特性。
阅读全文