**根据需求完成代码:**
1.定义狗类
属性:
年龄,颜色
行为:
1.eat(String something) //(something表示吃的东西)
2.看家lookHome方法(无参数)
2.定义猫类:
属性:
年龄,颜色
行为:
1.eat(String something)方法(something表示吃的东西)
2.逮老鼠catchMouse方法(无参数)
3.定义Person类
//饲养员
属性:
姓名,年龄
行为:
1.keepPet(Dog dog,string somlething)方法
功能:喂养宠物狗,something表示喂养的东西
2.keepPet(Cat cat,String something)方法
功能:喂养宠物猫,something表示喂养的东西
3.生成空参有参构造,set和get方法
4.定义测试类(完成以下打印效果)
1.keepPet(Dog dog,Strign something) 方法打印内容如下
年龄为30岁的老王养了一只黑颜色的2岁的狗2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
2.keepPet(Cat cat,String something)方法 打印内容如下
年龄为25岁的老李养了一只灰颜色的3岁的猫3岁的灰颜色的猫眯着眼睛侧着头吃鱼
5.思考:
1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处?
2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?
代码实例:
1.Animal类:Dog与Cat的父类
package test8_polymorphic_demo4;
//父类
public class Animal {
private int age;
private String color;
public Animal() {
}
public Animal(int age, String color) {
this.age = age;
this.color = color;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void eat(String something){
System.out.println("动物吃"+something);
}
}
Dog类:
package test8_polymorphic_demo4;
public class Dog extends Animal {
public Dog() {
}
public Dog(int age, String color) {
super(age, color);
}
public void eat(String something){
System.out.println("狗吃"+something);
}
public void lookHome(){
System.out.println("看家");
}
}
Cat类:
package test8_polymorphic_demo4;
public class Cat extends Animal{
public Cat() {
}
public Cat(int age, String color) {
super(age, color);
}
public void eat(String something){
System.out.println("小猫吃"+something);
}
public void catchMouse(){
System.out.println("小猫逮老鼠");
}
}
Person类:
package test8_polymorphic_demo4;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void keepPet(Animal animal,String something){
if(animal instanceof Dog d){
System.out.println("年龄为"+age+"岁的老王养了一只"+d.getColor()+"颜色的"+d.getAge()+"岁的狗");
System.out.println(d.getAge()+"岁的"+d.getColor()+"颜色的狗两只前腿死死的抱住"+something+"猛吃");
//在此分别调用Dog类的eat()方法与Dog类特有的look方法,
// 但如果用原先的animal调用eat()方法可以,如果调用lookHome()这个Dog类特有的方法就会报错
d.eat(something);
d.lookHome();//animal.lookHome()会报错,下面的cat类一样
}else if(animal instanceof Cat c){
System.out.println("年龄为"+age+"岁的老李养了一只"+c.getColor()+"颜色的"+c.getAge()+"岁的猫");
System.out.println(c.getAge()+"岁的"+c.getColor()+"颜色的猫咪着眼睛侧着头吃鱼");
c.eat(something);
c.catchMouse();
}else{
System.out.println("没有这个类型!!!");
}
}
}
Test类(测试类):
package test8_polymorphic_demo4;
public class Test {
public static void main(String[] args) {
Animal animal1=new Dog(18,"黄");//利用多态创建Dog类
Animal animal2=new Cat(8,"白");//利用多态创建Cat类
Person person=new Person("王卫",38);//创建饲养员Person对象
//打印Dog类动作
person.keepPet(animal1,"猪大骨");
System.out.println("——————————————————————————此处为分界线——————————————————————————");
//打印Cat类动作
person.keepPet(animal2,"鱼");
}
}