【发布时间】:2015-06-26 14:23:15
【问题描述】:
假设我有我的经典:
public abstract class Mammal {
private int numLegs;
private String voice;
private Coat coat;
public abstract void eat();
public abstract void speak();
public abstract void sleep();
private abstract void ingestFood(Food f); //The abstract method ingestFood in type Mammal can only set a visibility modifier, one of public or protected
}
通过这些具体的实现:
public class Dog extends Mammal {
private int numLegs = 4;
private String voice = "Woof!";
private Coat coat = new Coat(COATTYPE.FUR, COATCOLOR.BROWN);
@Override
public void eat()
{
Rabbit r = chaseRabbits();
if (r != null) ingest(r);
else {
Garbage g = raidBin();
if (g!= null) ingest(g);
}
}
@Override
private void ingest(Food f)
{
gobbleItAllUpInFiveSeconds(f);
stillFeelHungry();
}
}
public class Human extends Mammal {
private int numLegs = 2;
private String voice = "Howdy!!";
private Coat coat = new Coat(COATTYPE.SKIN, COATCOLOR.PINK);
@Override
public void eat()
{
Food f = gotoSuperMarket();
ingest(f);
}
@Override
private void ingest(Food f)
{
burp();
}
}
现在,我想要 Mammal 类中的一个方法,该方法可由哺乳动物的所有实例调用,例如
public String describe() {
return "This mammal has " + this.numLegs + "legs, a " + this.coat.getColor() + " " this.coat.getCoatType() + " and says " + this.voice;
}
我的问题是,通过使Mammal 类不是抽象的,是否可以单独创建哺乳动物?例如
Mammal me = new Mammal();
你不应该这样做。
但是,我确实希望有一些由所有子类调用的父类实现的公共方法,但每个都调用自己的私有方法。
【问题讨论】:
-
这甚至不会编译。 'Mammal' 是一个普通类,所有方法都需要一个主体。除此之外:“哺乳动物”并不抽象。
-
您可以拥有一个带有方法实现的抽象类,但您无法实例化它。为什么你认为你不能?
-
@DaveNewton - 等等,你是对的,我问的原因是因为我收到了这个错误:
The abstract method genRecord in type AttributeSourceTableDao can only set a visibility modifier, one of public or protected -
@dwjohnston 想一想 -
Dog究竟会如何处理Mammal私有方法? -
@jdphenix 是的,我对我遇到的编译器错误有点困惑,考虑到我无法删除它,我会更新问题。
标签: java oop inheritance abstract