Oop 封装、抽象和多态性是否需要继承?
今天我面试了一个软件工程职位。我从stackoverflow那里读了很多关于面试的东西。他们问我关于OOP的正常情况。但他们也问我这些: 没有继承就可以进行封装吗 没有继承,抽象是可能的吗 没有继承,多态性是可能的吗 根据我对OOP的了解,我已经回答了这些问题。我不知道这是对还是错。有谁能用一些相关的例子告诉我这些问题的正确答案吗 谢谢Oop 封装、抽象和多态性是否需要继承?,oop,inheritance,polymorphism,encapsulation,abstraction,Oop,Inheritance,Polymorphism,Encapsulation,Abstraction,今天我面试了一个软件工程职位。我从stackoverflow那里读了很多关于面试的东西。他们问我关于OOP的正常情况。但他们也问我这些: 没有继承就可以进行封装吗 没有继承,抽象是可能的吗 没有继承,多态性是可能的吗 根据我对OOP的了解,我已经回答了这些问题。我不知道这是对还是错。有谁能用一些相关的例子告诉我这些问题的正确答案吗 谢谢 没有继承就可以进行封装吗 是的,因为封装是通过访问方法对外部世界隐藏类属性的能力 没有继承,抽象是可能的吗 抽象可以指很多东西,但说到OOP: 不,抽象类
- 没有继承就可以进行封装吗
- 没有继承,抽象是可能的吗
- 没有继承,多态性是可能的吗
是的,多态性是对几种类型的对象构造单个接口,例如,可以接收不同类或数据类型作为参数的单个函数调用。它们可以被继承,也可以不被继承。在没有继承的情况下,封装是绝对可能的。封装是一个概念,即隐藏来自外部对象的数据,这些对象不应该能够对其进行操作。封装的一个例子是Java中对象的私有字段。然后可以使用公共方法(如getter和setter,或其他计算方法)仅在需要时操作数据 然而,抽象和多态性与继承直接相关 抽象是指去掉一个对象的实现细节,创建一个抽象类或接口(用Java的术语来说)。这将作为任何实现或继承类在详细实现中需要包含的内容的约定。抽象类将有方法签名,但没有主体;继承类将实现这些实体 多态性是以不同形式实现抽象事物的能力。例如,如果有一个名为Animal的抽象类包含speak()方法,则可以创建一个从Animal继承的Dog类,并实现speak()以打印“woof”,而Cat()类将实现speak()以打印“meow”
请注意,它确实取决于正在检查的多态性类型。正如在另一个答案中所述,您可以拥有方法/函数参数多态性,并且正如所述,这在没有继承的情况下是可能的。好吧,我的理解是:
- 封装只是为了防止直接修改 实例的状态,即使没有OOP也可以完成
- 抽象是类(对象模板)的泛化,它不能 不能继承。它着重于常见的合同条款
- 多态性意味着相同的行为但不同的行为。通常是 使用抽象/接口。没有面向对象编程,这是不可能做到的
无需继承即可实现: 只需向类添加private属性,并使用setter和getter访问该属性封装
: 您可以将类抽象化,它不需要任何继承抽象本身在没有继承的情况下是可能的
在没有继承的情况下是不可能的:这是因为两种类型的对象之间的多态性必须有共同点才能工作。在java中,这甚至可以通过多态性
类来简化,所有类都是从java派生的Object
多态性-是的。一个简单的函数指针可以用来提供一个可插入的实现 所以,在封装中。你是说你有一个类,其中有所有的方法,你想对外界隐藏它?正确的?那么你的访问方法在哪里?如果它在同一个班级?那么它们不是被隐藏了吗?我的意思是你想对外界隐藏类或实例的属性,所以你需要构建方法(setter、getter等)来避免直接访问它们。这就是封装,“etc”部分是必不可少的。有些人认为封装只是提供getter和setter,而没有意识到它实际上是将数据及其相关行为(即使用该数据的方法)捆绑在一起。没有OOP还是没有继承?没有继承,是的,甚至没有OOP。这完全取决于语言。例如,在Smalltalk中,您可以实现无继承的多态性,因为Smalltalk是一种lat