JAVA面向对象——多态、抽象类练习
题目:豆豆家养了两只家禽Poultry:一只鸡Chicken和一只鸭Duck。请再写一个类Master,有一个方cry();
分析:
(1)写一个抽象类Poultry,他里面有属性name,sex,他里面有回来方法back()
(2)写一个类Chicken,继承抽象类Poultry
(3)写一个类Duck,继承抽象类Poultry
(4)再写一个类Master,里面有一个方法cry(),传一个字符串参数进去,如果传入是是小花,就返回小鸡,如果传的是小林,就返回鸭子
(5)写主方法测试MasterTest,里面使用Master对象调cry方法,并对调返回的对象的back方法
代码片段:
//父类:Poultry
public abstract class Poultry {
String result//写不写都可以
String name;
//静态常量:性别
final static String MAN_SEX="小伙";
final static String WOMAN_SEX="丫头";
String sex;
public abstract String back();
}
//Chicken类:
public class Chicken extends Poultry{
//重写父类的方法
@Override
public String back() {
return result="名叫"+name+"的小鸡,是个"+sex+",我一叫"+name+",她就屁颠屁颠的跑回来了";
}
}
//Duck类:
public class Duck extends Poultry {
//重写父类的方法
@Override
public String back() {
return "名叫"+name+"的小鸭,是一个"+sex+",我一叫"+name+",他就害怕的躲开了";
}
}
//Master 类:
public class Master {
Duck d = new Duck();
Chicken c = new Chicken();
//return 执行后代表这个程序结束 我们可以在测试类 中判断 cry这个方法 是否返回为null 如果为 null 就输入错误
public Poultry cry(String names){
if(names.equals("小花")){
c.name=names;
c.sex = c.WOMAN_SEX;
return c;
}else if(names.equals("小林")){
d.name=names;
d.sex = d.MAN_SEX;
return d;
}else{
System.out.println("erro");
}
return null;
}
}
//测试类
import java.util.Scanner;
public class MasterTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入:");
String names = sc.nextLine();
Master ma = new Master();
Poultry p = ma.cry(names);
if(!names.equals("exit")){
if(p==null){
System.out.println("输入错误,请重新输入!");
main(args);
}else{
System.out.println("tips:"+p.back());
System.out.println("通过!结束请输入 exit");
main(args);
}
}else{
System.out.println("程序结束!");
}
}
}
运行结果图如下: