Скажем, у меня есть классика:Почему у меня нет частного абстрактного метода?
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 -После того, как я прав, причина в том, что я получаю эту ошибку: «Абстрактный метод genRecord в типе AttributeSourceTableDao может устанавливать только модификатор видимости, один из публичных или защищенных. – dwjohnston