第5问看不懂 请解释?

第四题:根据需求完成代码:

1.定义动物类

属性:

年龄,颜色

行为:

eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)

生成空参有参构造,set和get方法


2.定义狗类继承动物类  

行为:

eat(String something)方法,看家lookHome方法(无参数)


3.定义猫类继承动物类

行为:eat(String something)方法,逮老鼠catchMouse方法(无参数)


4.定义Person类

属性:

姓名,年龄

行为:

keepPet(Dog dog,String something)方法

功能:喂养宠物狗,something表示喂养的东西

行为:

keepPet(Cat cat,String something)方法

功能:喂养宠物猫,something表示喂养的东西

生成空参有参构造,set和get方法  


5.定义测试类(完成以下打印效果):


keepPet(Dog dog,String somethind)方法打印内容如下:

年龄为30岁的老王养了一只黑颜色的2岁的宠物

2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃


keepPet(Cat cat,String somethind)方法打印内容如下:

年龄为25岁的老李养了一只灰颜色的3岁的宠物

3岁的灰颜色的猫眯着眼睛侧着头吃鱼*/





package com.heima.tes4;


public class Person {

private String name;

private int age;


public Person() {

super();


}


public Person(String name, int age) {

super();

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 a, String something) {

if (a instanceof Dog) {

Dog d = (Dog) a;

d.eat(something);

System.out.println("年龄为" + age + "岁的" + name + "养了一只" + d.getColor() + "颜色的" + d.getAge() + "岁的宠物");

} else if (a instanceof Cat) {

Cat c = (Cat) a;

c.eat(something);

System.out.println("年龄为" + age + "岁的" + name + "养了一只" + c.getColor() + "颜色的" + c.getAge() + "岁的宠物");

}

}


}


最后一问 为什么要用强制类型转换,还要调用d.eat(something);这个方法 ,真的是看不懂啊,求解决,万分感谢!

慕姐8946757
浏览 1877回答 3
3回答

不学就废了

猫和狗都是父类动物的子类,里面的方法都多于父类,吃东西的方法属于子类中特有的方法,所以,如果想要调用吃东西的方法必须把动物的实例转化为猫类或者是狗类,所以要用到强制类型转换

不学就废了

a instanceof b  判断a是不是b类的实例化对象

不学就废了

在第一个问题中,定义了一个animal类,所以cat 和dog都继承了这个animal类,所以,猫类和狗类是animal类的子类,在第五题最初,传入了一个动物实例,按照if语句的判断条件选择执行
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java