首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中,当我们在其中定义一个接口时,为什么不需要将一个类标记为抽象?

问在Java中,当我们在其中定义一个接口时,为什么不需要将一个类标记为抽象?
EN

Stack Overflow用户
提问于 2016-01-15 03:02:27
回答 3查看 69关注 0票数 0

如果我将类定义为

代码语言:javascript
复制
class A {
    interface AL {
        void method ();
    }
}

既然我有一个未定义的方法,为什么编译器不要求我将类标记为abstract呢?

EN

回答 3

Stack Overflow用户

发布于 2016-01-15 03:05:22

由于method()是接口AL的一个方法,因此代码运行良好。请注意,method()不是A的方法,因此,A类不需要是抽象的。

票数 1
EN

Stack Overflow用户

发布于 2016-01-15 03:11:39

没有实现的方法是嵌套接口声明的一部分。它不被认为是外部类的一部分。您可能想了解一下为什么使用嵌套接口声明是个好主意。

Why should we declare an interface inside a class?

票数 0
EN

Stack Overflow用户

发布于 2016-01-15 03:16:22

考虑一个例子:

假设您正在创建一些与动物王国相关的应用程序。

现在你需要创建一个狗,猫,狮子等对象。

所以你会想到的第一件事,因为这些都属于动物王国,我可以创建一个名为‘animal’的基类,所有东西都将继承它。现在你创造了这样的东西

代码语言:javascript
复制
class Animal {    
legs;    
family; 

eat();    
roam();  
sleep();     
makeNoise();    
}

因此,继承animal类的所有动物都将具有这些特性。你可以称之为"IS-A“关系。就像狗是-一种动物。

现在假设你被要求使用你的动物模拟程序来参加一些科学博览会。你也可以在那个地方使用这个设计。

现在假设有人让你在宠物店使用模拟器。

因为你没有任何宠物行为。您所做的是在基类中添加宠物特性,并认为这会起作用。

所以现在你的程序可以创建一只具有宠物行为的狮子。奇怪!!

现在你需要把所有的宠物行为放在一个地方,并确保所有的宠物都应该拥有它。

一种方法是创建另一个具有所有宠物特性的超类并对其进行扩展。这是多重继承,这是JAVA不允许的(就像谷歌致命的死亡钻石一样)。界面就这样出现了。

接口更像是您的对象实现的一组行为。由于每个对象都可以有自己的一组实现,所以所有这些方法都应该是抽象的。

它给你带来了多态的好处,没有致命的钻石死亡问题。它更像是一个契约,它定义了你的对象必须实现以下特性。

所以现在你可以做的是

代码语言:javascript
复制
interface PetBehavior{    
  befriend();    
  play();    
}  

并且来自不同继承树的类可以实现该接口。

抽象类让您大致了解具体对象的外观,但接口更像是一个contract。它告诉您object将具有哪些附加功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34797625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档