这个问题已经在这里有了答案 :
接口与抽象类(一般面向对象) (35个答案)
6年前关闭。
最近,我决定看一下Java,因此我仍然对它以及面向对象编程的方法还很陌生,因此我想在学习更多之前弄清楚一些事情((我想从好的实践开始永远不会很快) )。
我现在正在编写一个2D小游戏,但我想我的问题适用于任何非平凡的项目。为简单起见,我将提供游戏示例。
我有不同类型的僵尸,但是它们都有相同的属性(x,y,健康,攻击等),因此我编写了一个 界面
僵尸,由WalkingZombie,RunningZombie TeleportingZombie等实现。这是最好的做法吗?我最好选择 抽象类吗?
还是拥有 超一流的 ?(我不打算部分实现功能-因此,我选择使用 接口 而不是 抽象类 )
我有一类描述主要角色(幸存者),并且由于它很大,我想编写一个具有不同功能的界面,以便我可以轻松地看到并共享它的结构。这是好习惯吗?还是仅仅是浪费时间和空间?
我希望这个问题不会被认为是主观的,因为我认为有经验的程序员不会对此主题表示异议,因为使用接口/超类/抽象类遵循逻辑规则,因此不只是个人选择。
您可以将接口视为“合同”。您正在定义实现该接口的类必须实现的一组方法。
另一方面,当您拥有一些您可能要实现的所有子类通用的代码时,将使用抽象类。因此,您可能有一个名为Shape的抽象类,该类具有一些通用代码,而在派生类(圆形,正方形等)中,您可能具有特定于这些形状的代码(getArea
将作为示例)。但是颜色之类的东西可能对所有形状都是通用的,因此您可以getColor
在Shape抽象类中放置一个方法。
您可以将两个想法结合起来。您可以具有实现接口的抽象类,这可以使您两全其美。
这些概念在OO中反复使用,因此理解它们很重要。您似乎过得很好:)。
因此,如果您的僵尸类具有适用于所有类型的僵尸的某些常见行为,那么听起来很适合成为抽象类。GameCharacter
如果您的游戏中还有其他角色(也许UndeadMice
是什么),您也可以考虑创建一个界面(也许是一个界面)。然后,您的Zombie
抽象类和UndeadMouse
抽象类将实现该GameCharacter
接口。
问题内容: 在面试中,有人问我以下问题。我试图回答这个问题,但是我想确切回答这个问题。 如果我可以将Abstract类模拟为Interface,为什么Java提供了Interface? 这意味着如果在Abstract类中我可以将所有方法标记为abstract,然后abstract类将用作接口,那么为什么我需要接口。 谁能简单地解释一下我。 问题答案: 这是一个非常标准的面试问题。答案是:因为您可以
问题内容: 考虑一个示例(在Java中编译) 为什么必须将接口“声明”为抽象的?还有其他适用于抽象接口的规则吗? 最后:如果过时了,为什么将它包含在Java中?有抽象接口的历史吗? 问题答案: 为什么必须将接口“声明”为抽象的? 不是。 接口及其方法是隐式的,添加该修饰符没有区别。 还有其他适用于抽象接口的规则吗? 不,适用相同的规则。该方法必须由任何(具体)实现类来实现。 如果抽象已经过时,为什
我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗
接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box { public: // 纯虚函数 virtual double getVolume() =
问题内容: 为什么要创建抽象或接口类,或者何时应使用抽象或接口类? 问题答案: 仅在声明类必须具有的方法和成员时,才使用接口。实现该接口的任何人都必须声明和实现该接口列出的方法。 如果你还想拥有默认实现,请使用抽象类。扩展抽象类的任何类都必须仅实现其抽象方法和成员,并且将具有抽象类其他方法的一些默认实现,你可以覆盖或不重写。 -编辑-忘了提,Earwicker提醒我 最后,你可以根据需要实现任意数
理解抽象 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。 其实,