相关疑难解决方法(0)

抽象和封装有何不同?

我正在准备面试,并决定刷新我的OOP概念.有数百篇文章可供使用,但似乎每篇文章都有不同的描述. 有人

抽象是"识别具有系统变化的共同模式的过程;抽象代表了常见模式,并提供了指定使用哪种变体的方法"(Richard Gabriel).

并通过抽象类实现.

一些其他的

抽象意味着仅向对象的客户端显示必要的细节

假设您的Employee类中有一个方法"CalculateSalary",它将EmployeeId作为参数,并将当前月份的员工薪水作为整数值返回.现在,如果有人想要使用该方法.他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,输入参数和结果成员的格式,

我一遍又一遍地搜索,结果似乎没有给我一个正确的答案. 现在,封装在哪里适合所有这些? 我搜索并发现了堆栈溢出问题.即使答案到问题被混淆 在这里,它说

封装是一种用作抽象的一部分的策略.封装是指对象的状态 - 对象封装其状态并将其隐藏在外部; 类的外部用户通过其方法与之交互,但无法直接访问类状态.因此,该类抽象出与其状态相关的实现细节.

这里的另一个知名的成员说,

它们是不同的概念.

抽象是精炼对象的所有不需要/不重要的属性并且仅保留最适合您的域的特征的过程.

现在我搞砸了整个概念.我知道抽象类,继承,访问说明符和所有.我只是想知道在面试中被问及抽象和/或封装时我该如何回答.

请不要将其标记为重复.我知道有几个类似的问题.但我想避免相互矛盾的解释之间的混淆.任何人都可以提出可靠的链接吗?除非再次造成混淆,否则也欢迎链接到stackoverflow问题.:)

编辑:我需要答案,有点c#导向

c# oop encapsulation abstraction

70
推荐指数
6
解决办法
16万
查看次数

为什么要使用接口,多重继承与接口,接口的好处?

我对这件事情仍然有些困惑.我到现在所发现的是

(这里已经提出了类似的问题,但我还有其他一些观点.)

  1. 接口是仅抽象方法和最终字段的集合.

  2. Java中没有多重继承.

  3. 接口可用于在Java中实现多重继承.

  4. 继承的一个优点是我们可以在派生类中使用基类代码而无需再次编写它.可能这是继承在那里最重要的事情.

现在..

Q1.由于接口只有抽象方法(没有代码)所以我们怎么说如果我们实现任何接口那么它是继承?我们没有使用它的代码.

Q2.如果实现接口不是继承,那么如何使用接口来实现多重继承?

Q3.无论如何使用Interfaces有什么好处?他们没有任何代码.我们需要在我们实现它的所有类中反复编写代码.

那么为什么要制作接口呢?

注意:我找到了一个接口有用的案例.它的一个例子就像在Runnable接口中我们有public void run()方法,我们在其中定义线程的功能,并且内置编码,该方法将作为单独的线程运行.所以我们只需要编写线程中的代码,Rest是预定义的.但是这个东西也可以用抽象类和所有东西来实现.

那么使用接口的确切好处是什么?我们使用Interfaces实现了多重继承吗?

java oop inheritance interface multiple-inheritance

63
推荐指数
6
解决办法
5万
查看次数

抽象类与接口

我已经搜索了SO以及网络的其他部分以获得一个很好的答案,但我找不到一个我真正理解的内容.我将以不同的方式呈现这一点,希望答案也能帮助其他人.

据我所知,这两个概念具有相同的规则,但由于方法实现能力,抽象类更灵活.此外,我知道你可以实现多个接口,只扩展一个类,但我确信有比我提到的两个更多的差异.

请查看代码的两个片段,并举例说明我可以对我的每个示例做些什么,这些示例会让我想要或不想使用另一个.

抽象类

abstract class Foo {
    abstract public function getValue();
    abstract public function setValue($value); 
}


class myObj extends Foo {
    function getValue() {

    }
    function setValue($value) {

    }
}
Run Code Online (Sandbox Code Playgroud)

接口

interface Foo {
    public function getValue();
    public function setValue($value);
}

class myObj implements Foo {
    function getValue() {

    }
    function setValue($value) {

    }
}
Run Code Online (Sandbox Code Playgroud)

php abstract-class interface conceptual

57
推荐指数
3
解决办法
6万
查看次数

抽象类和接口之间有什么区别?

假设我们有两个方法M1(),并M2()在接口.抽象类也有两个相同的抽象方法.如果任何类实现了此接口或从抽象类继承,则必须同时实现其中的方法.

所以对我来说,似乎我的场景中的接口或抽象类的行为相同.那么,任何人都可以在这个特定的情况下突出显示这两者之间的区别,并建议是否在这里使用抽象类或接口?

c# oop abstract-class interface

47
推荐指数
1
解决办法
8万
查看次数

为什么接口首选抽象类?

我最近参加了一次采访,他们问我"为什么接口比抽象类更受欢迎?"

我尝试给出一些答案,如:

  • 我们只能获得一个Extends功能
  • 他们是100%抽象
  • 实施不是硬编码的

他们让我带走你使用的任何JDBC api."为什么他们是接口?".

我可以为此得到更好的答案吗?

java oop abstraction interface

35
推荐指数
7
解决办法
1万
查看次数

何时使用接口或抽象类?何时使用?

虽然某些指导原则指出,当你想为继承不是明确的类定义合同时应该使用接口(IDomesticated),当类是另一个(Cat : Mammal,Snake : Reptile)的扩展时继承,有些情况(在我看来)这些准则进入灰色地带.

例如,说我的实施是Cat : Pet.Pet是一个抽象类.应该说是扩大到Cat : Mammal, IDomesticated那里Mammal是一个抽象类,IDomesticated是接口?或者我是否与KISS/YAGNI原则相冲突(尽管我不确定Wolf将来是否会有一个课程,但是无法继承Pet)?

远离隐喻Cats和Pets,假设我有一些表示传入数据源的类.他们都需要以某种方式实现相同的基础.我可以在抽象Source类中实现一些通用代码并从中继承.我也可以创建一个ISource接口(对我来说感觉更"正确")并在每个类中重新实现通用代码(这不太直观).最后,通过制作抽象类和界面,我可以"吃蛋糕并吃掉它".什么是最好的?

这两种情况提出了仅使用抽象类,只使用接口并同时使用抽象类和接口的要点.这些都是有效的选择,还是存在"规则",以便何时应该使用另一个?


我想通过"同时使用抽象类和接口"来澄清,当它们基本上表示相同的事物(Source并且ISource两者都具有相同的成员)时,包括这种情况,但是类在接口指定合同时添加了通用功能.

另外值得注意的是,这个问题主要针对不支持多重继承的语言(例如.NET和Java).

oop abstract-class interface

33
推荐指数
3
解决办法
4万
查看次数

接口上的c#属性

任何人都可以帮助我,在接口或抽象类中包含属性是否是最佳做法?

我想联系应该只有方法签名?

.net c#

33
推荐指数
4
解决办法
3万
查看次数

Kotlin:为什么要使用抽象类(与接口相比)?

我知道Kotlin中抽象类和接口之间的两个区别:

  • 抽象类可以有状态(例如var......)
  • 一个类可以实现多个接口,但不能实现多个抽象类.

由于Kotlin是一种相当新鲜的语言,我想知道为什么抽象类没有被抛弃?接口似乎是优秀的工具,对Abstract Classes的需求很少.

详细说明:Kotlin确实支持接口中的具体功能实现,例如:

interface Shiny {

    fun shine(amount : Int)  // abstract function

    fun reflect(s : String) { print ("**$s**") }  // concrete function

}
Run Code Online (Sandbox Code Playgroud)

有人能提供一个强有力的实例来说明抽象类的需求吗?

abstract-class kotlin

31
推荐指数
2
解决办法
4619
查看次数

何时使用抽象类或接口?

为什么要创建抽象类或接口类,或者何时应该使用抽象类或接口类?

java abstract-class interface

28
推荐指数
3
解决办法
3万
查看次数

使用Java [接口/抽象类]

最近我决定看看Java,所以我还是很新的,也是OO编程的方法,所以我想在学习更多东西之前先做一些事情,(我想它永远不会很快从良好实践开始) ).

我现在正在编写一个2D游戏,但我认为我的问题适用于任何非平凡的项目.为了简单起见,我将从我的游戏中提供示例.

我有不同种类的僵尸,但它们都有相同的属性(x,y,健康,攻击等)所以我写了一个界面 Zombie,我实现了WalkingZombie,RunningZombie TeleportingZombie等.这是最好的事情吗?我最好用抽象课吗?还是超级?(我不打算部分实现函数 - 因此我选择了一个接口而不是一个抽象类)

我有一个类描述主角(Survivor),因为它非常大,我想用不同的函数编写一个接口,这样我就可以轻松地看到并分享它的结构.这是好习惯吗?还是只是浪费空间和时间?

我希望这个问题不会被评为主观,因为我认为有经验的程序员不会对这种话题产生不同意见,因为接口/超类/抽象类的使用遵循逻辑规则,因此不仅仅是个人选择.

java abstract-class interface superclass

25
推荐指数
1
解决办法
3868
查看次数