为什么抽象类要通过父类的构造方法给子类赋值
时间: 2023-12-24 13:03:23 浏览: 72
首先需要明确的是,抽象类本身是不能被实例化的,所以我们不能直接通过抽象类来给子类赋值。但是,抽象类可以有构造方法,而子类必须实现抽象类中的所有抽象方法,包括构造方法。因此,子类在实现抽象类的构造方法时需要调用父类的构造方法来完成一些初始化工作,比如给父类的成员变量赋值。这样,当我们实例化子类时,子类的构造方法会先调用父类的构造方法,从而完成父类的初始化工作,子类才能正确地继承和使用父类的属性和方法。
相关问题
1)抽象类Person含有私有属性name和id,含有有参构造方法,为name和id赋值,含有void show(),可输出成员属性值,“我是谁”,含String getName(),返回name值 含抽象方法 字符串运行(字符串名称) Person的子类Student含私有属性school和Department,含有参构造方法,为name,id,school,Department赋值,重写父类中的run(),返回“某学院” 类Test定义含有main()方法的测试类,在main()中创造对象,调用构造方法完成成员赋值,并通过相应成员调用,完成输出
好的,我理解了你的问题。下面是实现代码:
```
// 抽象类 Person
abstract class Person {
private String name;
private String id;
public Person(String name, String id) {
this.name = name;
this.id = id;
}
public abstract String run(String name);
public void show() {
System.out.println("我是" + name + ", 我的ID是" + id);
}
public String getName() {
return name;
}
}
// 子类 Student
class Student extends Person {
private String school;
private String department;
public Student(String name, String id, String school, String department) {
super(name, id);
this.school = school;
this.department = department;
}
// 重写父类中的 run() 方法
public String run(String name) {
return "某学院";
}
}
// 测试类 Test
public class Test {
public static void main(String[] args) {
Student student = new Student("张三", "20210101", "某大学", "计算机科学与技术");
student.show();
System.out.println(student.getName() + "就读于" + student.run(student.getName()));
}
}
```
输出结果:
```
我是张三, 我的ID是20210101
张三就读于某学院
```
编写Java程序,抽象类Person含有私有属性name和id,含有有参构造方法,为name和id赋值,含有void show(), 可输出成员属性值,“我是xx,id为”,含String getName(),返回name值 含抽象方法 String run(String name) Person的子类Student含私有属性school和department,含有参构造方法,为name,id,school,department赋值, 重写父类中的run(),返回“某学院某同学在某学校夜跑” 类Test定义含有main()方法的测试类,在main()中创造对象,调用构造方法完成成员赋值,并通过相应成员调用,完成输出
好的,以下是Java程序的实现:
Person抽象类:
```java
public abstract class Person {
private String name;
private String id;
public Person(String name, String id) {
this.name = name;
this.id = id;
}
public void show() {
System.out.println("我是" + name + ", id为" + id);
}
public String getName() {
return name;
}
public abstract String run(String name);
}
```
Student子类:
```java
public class Student extends Person {
private String school;
private String department;
public Student(String name, String id, String school, String department) {
super(name, id);
this.school = school;
this.department = department;
}
@Override
public String run(String name) {
return "某学院" + name + "在" + school + "夜跑";
}
}
```
Test测试类:
```java
public class Test {
public static void main(String[] args) {
Person person = new Student("小明", "20210001", "某大学", "计算机系");
person.show();
System.out.println(person.run(person.getName()));
}
}
```
输出结果:
```
我是小明, id为20210001
某学院小明在某大学夜跑
```
希望我的回答能够帮助到你。
阅读全文