比方說,我有我的經典:爲什麼我不能有一個私人的抽象方法?
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();
您應該無法做到這一點。
但是,我確實希望有一些公共方法由所有子類調用的父類實現,但每個方法都調用它們自己的私有方法。
這甚至不會編譯。 「哺乳動物」是一個普通的課程,所有的方法都需要一個身體。除此之外:「哺乳動物」不是抽象的。 – Paul
你*可以*擁有一個具有方法實現的抽象類,並且你不能實例化它。你爲什麼認爲你不能? –
@DaveNewton - 你說得對,我問的原因是因爲我得到這個錯誤:類型AttributeSourceTableDao中的抽象方法genRecord只能設置公共或受保護的可見性修飾符 – dwjohnston