如果我将类定义为
class A {
interface AL {
void method ();
}
}既然我有一个未定义的方法,为什么编译器不要求我将类标记为abstract呢?
发布于 2016-01-15 03:05:22
由于method()是接口AL的一个方法,因此代码运行良好。请注意,method()不是A的方法,因此,A类不需要是抽象的。
发布于 2016-01-15 03:11:39
没有实现的方法是嵌套接口声明的一部分。它不被认为是外部类的一部分。您可能想了解一下为什么使用嵌套接口声明是个好主意。
发布于 2016-01-15 03:16:22
考虑一个例子:
假设您正在创建一些与动物王国相关的应用程序。
现在你需要创建一个狗,猫,狮子等对象。
所以你会想到的第一件事,因为这些都属于动物王国,我可以创建一个名为‘animal’的基类,所有东西都将继承它。现在你创造了这样的东西
class Animal {
legs;
family;
eat();
roam();
sleep();
makeNoise();
}因此,继承animal类的所有动物都将具有这些特性。你可以称之为"IS-A“关系。就像狗是-一种动物。
现在假设你被要求使用你的动物模拟程序来参加一些科学博览会。你也可以在那个地方使用这个设计。
现在假设有人让你在宠物店使用模拟器。
因为你没有任何宠物行为。您所做的是在基类中添加宠物特性,并认为这会起作用。
所以现在你的程序可以创建一只具有宠物行为的狮子。奇怪!!
现在你需要把所有的宠物行为放在一个地方,并确保所有的宠物都应该拥有它。
一种方法是创建另一个具有所有宠物特性的超类并对其进行扩展。这是多重继承,这是JAVA不允许的(就像谷歌致命的死亡钻石一样)。界面就这样出现了。
接口更像是您的对象实现的一组行为。由于每个对象都可以有自己的一组实现,所以所有这些方法都应该是抽象的。
它给你带来了多态的好处,没有致命的钻石死亡问题。它更像是一个契约,它定义了你的对象必须实现以下特性。
所以现在你可以做的是
interface PetBehavior{
befriend();
play();
} 并且来自不同继承树的类可以实现该接口。
抽象类让您大致了解具体对象的外观,但接口更像是一个contract。它告诉您object将具有哪些附加功能。
https://stackoverflow.com/questions/34797625
复制相似问题