编程要求
按照要求编写一个Java
应用程序:
-
定义一个抽象类
Person
,包含抽象方法eat()
,封装属性name
、sex
、age
,声明包含三个参数的构造方法; -
定义一个
Chinese
类,继承自Person
类,重写父类的eat()
方法,并定义一个自己特有的方法shadowBoxing()
; -
定义一个
English
类,继承自Person
类,重写父类的eat()
方法,并定义一个自己特有的方法horseRiding()
; -
编写测试类,定义一个
showEat()
方法,使用父类作为方法的形参,实现多态,分别调用showEat()
方法,通过强制类型转换调用各自类特有的方法; -
具体输出要求请看测试说明。
测试说明
测试输入:张三
男
20
史蒂文
男
22
预期输出:姓名:张三,性别:男,年龄:20,我是中国人,我喜欢吃饭!
姓名:史蒂文,性别:男,年龄:22,我是英国人,我喜欢吃三明治!
张三在练习太极拳!
史蒂文在练习骑马!
开始你的任务吧,祝你成功!
//package case2;
import java.util.Scanner;
public class Task2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String cName = sc.next();
String cSex = sc.next();
int cAge = sc.nextInt();
String eName = sc.next();
String eSex = sc.next();
int eAge = sc.nextInt();
Person person1=new Chinese(cName,cSex,cAge);
Person person2=new English(eName,eSex,eAge);
showEat(person1,person2);
}
// 定义showEat方法,使用父类作为方法的形参,实现多态,传入的是哪个具体对象就调用哪个对象的eat()方法
/********* begin *********/
public static void showEat(Person person1,Person person2){
Chinese c=(Chinese)person1;
System.out.print(c.toString());
c.eat();
English e=(English)person2;
System.out.print(e.toString());
e.eat();
c.shadowBoxing();
e.horseRiding();
}
/********* end *********/
}
// 抽象类Person 封装属性name、sex和age
// 构造函数初始化name、sex和age
// 声明抽象方法eat()
abstract class Person {
private String name;
private String sex;
private int age;
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public int getAge() {
return age;
}
public String toString() {
return String.format("姓名:%s,性别:%s,年龄:%d,",getName(),getSex(),getAge());
}
}
// Chinese类继承自Person类
// 构造函数初始化name、sex和age
// 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是中国人,我喜欢吃饭!'
// 定义子类特有方法shadowBoxing(),当父类引用指向子类对象时无法调用该方法 输出'name在练习太极拳!'
class Chinese extends Person {
public Chinese(String name,String sex,int age){
super(name,sex,age);
}
void eat(){
System.out.println("我是中国人,我喜欢吃饭!");
}
void shadowBoxing(){
System.out.println(getName()+"在练习太极拳!");
}
}
// English类继承自Person类
// 构造函数初始化name、sex和age
// 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是英国人,我喜欢吃三明治!'
// 定义子类特有方法horseRiding(),当父类引用指向子类对象时无法调用该方法 输出'name在练习骑马!'
class English extends Person {
public English(String name, String sex, int age) {
super(name, sex, age);
}
void eat(){
System.out.println("我是英国人,我喜欢吃三明治!");
}
void horseRiding(){
System.out.println(getName()+"在练习骑马!");
}
}