13、类的继承案例2:
(1)定义Person类,包含3 个成员变量name(姓名)、age(年龄)、sex
(性别)和3个构造方法,其中无参参构造方法初始化变量;一个有参构造方法的
参数为与成员变量相同的参数列表 通过传递的参数初始化变量;另一个有参构
造方法的参数为类的对象,通过对象初始化变量,然后定义 showInfo()方法显示信息。(50分)
(2)另外,定义City类继承 Person类,包括成员变量name(城市名)和3个构造方法,使用 super 关键字记调用父类的构造方法和成员变量对父类的成员变量进行初始化,然后对子类新增的成员变量进行初始化,最后重写 showInfo()方法。(50分)
class Person {
String name;
int age;
String sex;
public Person() {
this.name = "";
this.age = 0;
this.sex = "";
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person(Person person) {
this.name = person.name;
this.age = person.age;
this.sex = person.sex;
}
public void showInfo() {
System.out.println("姓名:" + name + " 年龄:" + age + " 性别:" + sex);
}
}
class City extends Person {
String cityName;
public City() {
super();
this.cityName = "";
}
public City(String name, int age, String sex, String cityName) {
super(name, age, sex);
this.cityName = cityName;
}
public City(Person person, String cityName) {
super(person);
this.cityName = cityName;
}
public void showInfo() {
super.showInfo();
System.out.println("城市:" + cityName);
}
}
代码如下:
class Person {
private String name;
private int age;
private String sex;
public Person() {
this.name = "";
this.age = 0;
this.sex = "";
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person(Person person) {
this.name = person.name;
this.age = person.age;
this.sex = person.sex;
}
public void showInfo() {
System.out.println("姓名: " + name + "\n年龄: " + age + "\n性别: " + sex);
}
}
class City extends Person {
private String cityName;
public City() {
super();
this.cityName = "";
}
public City(String name, int age, String sex, String cityName) {
super(name, age, sex);
this.cityName = cityName;
}
public City(Person person, String cityName) {
super(person);
this.cityName = cityName;
}
@Override
public void showInfo() {
super.showInfo();
System.out.println("城市: " + cityName);
}
}
解释一下:
Person
类定义了 3 个成员变量和 3 个构造方法,其中包括无参构造方法、有参构造方法和以类对象为参数的构造方法。构造方法用来初始化对象的成员变量。showInfo()
方法用来显示 Person
对象的信息。City
类继承了 Person
类,添加了一个 String
类型的成员变量 cityName
。它同样定义了 3 个构造方法,其中包括一个无参构造方法、一个有参构造方法和一个以 Person
对象为参数的构造方法。这些构造方法使用 super
关键字来调用父类的构造方法和初始化父类的成员变量,然后初始化子类的成员变量。showInfo()
方法被重写,它首先调用父类的 showInfo()
方法,然后输出 cityName
。这个类的使用方式如下:
Person person = new Person("张三", 20, "男");
person.showInfo(); // 输出 张三 20 男
City city = new City("李四", 30, "女", "北京市");
city.showInfo(); // 输出 李四 30 女 北京市
当我们使用 City
的有参构造方法或以 Person
为参数的构造方法时,先调用父类的构造方法进行初始化。然后再初始化子类的 cityName
成员变量。调用 showInfo()
方法时,它会首先调用父类的 showInfo()
方法,输出父类的信息,然后输出子类的 cityName
。