3 回答
TA贡献1877条经验 获得超6个赞
您应该完全忘记该方法,breastFeed因为这只是一个规范。只需添加一个方法feed()进入IAnimal,然后让实现决定如何吃:
interface IAnimal{
void feed();
}
abstract class Mammal implements IAnimal{}
ADog可能会吃一些肉:
class Dog extends Mammal{
public void feed(){
System.out.println("Eating meat!");
}
}
而一个人BabyCat可能会喝一些牛奶:
class BabyCat extends Mammal{
public void feed(){
System.out.println("Drinking milk!");
}
}
这是要走的路,因此在声明狗时如下:
IAnimal animal = new Dog();
然后,您可以致电anmial.feed()。然后让实现来处理其余的事情。
TA贡献1831条经验 获得超9个赞
这是有效的,因为您有继承链。但是这里的事情是,dog被声明为IAnimal
,并且只公开该接口具有的方法,而不公开实现中的方法。如果需要访问该breastFeed()
方法,则应将值强制转换为子类。
TA贡献1847条经验 获得超11个赞
我不会在这里使用接口,因为所有行为都是继承的。但是,使用IAnimal dog = new Dog();dog只能访问IAnimal方法。因此,如果要将dog存储到Mammal变量中,则可以访问该breastFeed()方法。
例如:
public abstract class Animal {
public abstract void feed();
}
public abstract class Mammal extends Animal {
public abstract void breastFeed();
}
public class Dog extends Mammal{
@Override
public void breastFeed() {
System.out.println("Drinking milk!");
}
@Override
public void feed() {
System.out.println("Eating meating");
}
}
public class TryingAnimal {
public static void main(String[] args) {
Dog dog = new Dog();
dog.breastFeed();
dog.feed();
Animal animal = dog;
animal.feed();
Mammal mammal = dog;
mammal.breastFeed();
}
}
希望这可以帮助。
添加回答
举报