定义一个抽象类Person,包含抽象方法eat(),封装属性name、sex、age,声明包含三个参数的构造方法; 定义一个Chinese类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法shadowBoxing(); 定义一个English类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法horseRiding(); 编写测试类,定义一个showEat()方法,使用父类作为方法的形参,实现多态,分别调用showEat()方法,通过强制类型转换调用各自类特有的方法;
时间: 2024-02-12 20:04:23 浏览: 165
好的,以下是代码实现:
```java
// 抽象类 Person
public abstract class Person {
private String name;
private String sex;
private int age;
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public abstract void eat();
// getter 和 setter 方法省略
}
// Chinese 类
public class Chinese extends Person {
public Chinese(String name, String sex, int age) {
super(name, sex, age);
}
@Override
public void eat() {
System.out.println("中国人喜欢吃饺子");
}
public void shadowBoxing() {
System.out.println("中国人喜欢练习拳击");
}
}
// English 类
public class English extends Person {
public English(String name, String sex, int age) {
super(name, sex, age);
}
@Override
public void eat() {
System.out.println("英国人喜欢吃炸鱼薯条");
}
public void horseRiding() {
System.out.println("英国人喜欢骑马");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
showEat(new Chinese("张三", "男", 20));
showEat(new English("Tom", "男", 25));
}
public static void showEat(Person person) {
person.eat();
if (person instanceof Chinese) {
((Chinese) person).shadowBoxing();
} else if (person instanceof English) {
((English) person).horseRiding();
}
}
}
```
运行结果:
```
中国人喜欢吃饺子
中国人喜欢练习拳击
英国人喜欢吃炸鱼薯条
英国人喜欢骑马
```
阅读全文