实现:接口是没有实现细节的抽象类,所以你只能声明事物(Contracts)。类实现一个接口,以确保它遵循接口的规则和协定。一个类可以实现多个接口。
扩展:当您需要类的更具体版本时,可以扩展类。而且您也不想重复编写父类中存在的其他方法。
例:
// Contract: a pet should play
public interface Pet {
public void play();
}
// An animal eats and sleeps
class Animal {
public void eat(){ //details };
public void sleep(){ //details };
}
public class Camel extends Animal {
// no need to implement eat() and sleep() but
// either of them can be implemented if needed. i.e.
// if Camel eats or sleeps diffrently from other animals!
}
public class Dog extends Animal implements Pet {
public void play() {
// MUST implemt play() details
}
}
骆驼和狗都是动物,所以它们扩展了阶级。但只有狗是一种特定的种类,也可以是.Animal
Animal
Pet
正如你所看到的,这个线程被关闭了,因为它是意见基础,没有确切的正确答案。这是一个设计选择,取决于情况和项目需求。您有两个选项可用,现在您可以决定什么是最佳选择。例如,狗类不必总是像上面的例子一样,如果项目都是关于不同种类的狗(而不是其他动物),甚至它们的睡眠和饮食差异也很重要!它可以是这样的:
// the main contract
public interface Dog {
public void eat();
public void sleep();
}
// Contract
public interface Pet {
public void play();
}
// Contract
public interface Hunter {
public void hunt();
}
public class FamilyDogs implements Dog, Pet {
// must implement all details
}
public class GuardDogs implements Dog, Hunter {
// must implement all details
}