我知道“接口”和“抽象类”的区别。但是你能给我提供一个可以通过“接口”而不是通过“抽象类”来构建的示例吗?
发布于 2014-12-18 19:38:38
一个简单的例子是表示相同实体但具有不同行为的对象。以鸟类为例。有些鸟会飞,有些鸟不会飞,定义一个强制它的所有子类都实现fly方法的abstract class Bird是错误的。
因此,在这种情况下,可以将eat()或sleep()等方法定义为abstract class Bird中的抽象方法,但不能定义为fly(),因为不是所有的鸟都能飞。
通常,您将定义一个名为instace Flyable的接口,该接口将包含fly()方法的定义,该方法必须由实现该接口的类覆盖。
最后,你会得到类似这样的结果:
public abstract class Bird{
public abstract void eat();
public abstract void sleep();
}
public interface Flyable{
void fly();
}
public class Eagle extends Bird implements Flyable{
.... has to implement eat(), sleep() and fly()
}
public class Ostrich extends Bird{
... has to implement only eat() and sleep() since ostrich can't fly
}发布于 2014-12-18 19:33:32
100%的抽象化称为接口。
List是一个接口。它只是简单的方法定义。
抽象类:它有一些方法实现。
AbstractList是一个抽象类。它有方法实现。
发布于 2014-12-18 19:50:32
java.lang.Comparable中的可比较接口永远不能实现为类(即抽象类),这是因为compareTo方法完全依赖于实现它的类。并且要求对于所有对象比较,他们应该已经实现了这个方法(被比较的对象)
注意:可比较类用于比较两个对象是否相等
尽管StringBuilder和StringBuffer都扩展了AbstractStringBuilder,但它更适合作为抽象类来编写。这样,两个类中的公共功能(如charAt、expandCapacity、indexOf )都可以放在这种抽象的class..This方式中,代码可以重用,这在接口的情况下是不可能的
https://stackoverflow.com/questions/27545592
复制相似问题