Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多态性是遗传即将产生的副作用吗?_Java_Oop - Fatal编程技术网

Java 多态性是遗传即将产生的副作用吗?

Java 多态性是遗传即将产生的副作用吗?,java,oop,Java,Oop,遗传是否可以不带多态性而存在,或者是它即将产生的副作用?这可能是一个错误的问题,但它将帮助我理解两者之间的关系 没有多态性继承能存在吗 它们是相关的概念,但是是的,可以有一个没有另一个。在Java中,如果对父类进行子类化,也会得到子类型,但在其他语言中,情况可能并非如此。在某些语言中,继承可能只是代码重用的一种形式 例如,在C++中,如果不标记方法>代码>虚拟< /代码>,则不会得到多态性。有关说明,请参见此处:。另一方面,在Java中,所有公共方法都隐式地virtual 这是一个涉及面很广的主

遗传是否可以不带多态性而存在,或者是它即将产生的副作用?这可能是一个错误的问题,但它将帮助我理解两者之间的关系

没有多态性继承能存在吗

它们是相关的概念,但是是的,可以有一个没有另一个。在Java中,如果对父类进行子类化,也会得到子类型,但在其他语言中,情况可能并非如此。在某些语言中,继承可能只是代码重用的一种形式

例如,在C++中,如果不标记方法>代码>虚拟< /代码>,则不会得到多态性。有关说明,请参见此处:。另一方面,在Java中,所有公共方法都隐式地

virtual

这是一个涉及面很广的主题,在许多语言中都有许多不同的风格。作为TL;DR(和一个粗略的简化)您可以认为继承是代码重用的一种形式,而多态性是用子类型的对象替换类型的对象的能力,并且您的程序可以继续正常工作。在Java中,这两种语言重叠,可以从另一种语言中得到一种,但并非所有语言都是这样


而且,即使您从继承中获得了现成的多态性,也有可能通过不尊重继承来“打破多态性”。就像我说的。。。一个庞大的主题。

如果你仔细观察,它们实际上是相互关联的,因为它的继承使多态性成为可能,而两个类之间没有任何关系,因此不可能编写多态代码,因为多态代码可以利用不同对象的运行时绑定

您不能在非子类继承的对象上使用多态性,例如,在Java中不能重写私有方法

和现实世界一样,继承用于定义两个类之间的关系。这类似于父子关系。在面向对象编程中,我们有一个父类(也称为超类)和一个子类(也称为子类)。与现实世界类似,孩子继承父母的品质,如属性、方法和代码。继承实际上是为了代码重用。子类可以重用父类中编写的所有代码,并且只为不同于父类的行为编写代码。尽管在Java中,可以通过使用private和final关键字将某些内容限制为父对象本身。另一方面,多态性是对象以多种形式行为的能力

阅读更多:

继承是指“类”从现有的“类”派生。所以如果你有一个Person类,那么你有一个扩展Person的Student类,Student继承Person拥有的所有东西。关于您亲自在字段/方法上添加的访问修饰符,有一些细节,但这是基本思想。例如,如果Person上有一个私有字段,Student将看不到它,因为它的私有字段对子类不可见

多态性处理程序如何决定使用哪种方法 应该使用,取决于它有什么类型的东西。如果你有 Person,它有一个read方法,您有一个扩展 Person,它有自己的read实现,哪个方法 调用由运行时确定,具体取决于您是否有 个人或学生。这有点棘手,但如果你做了什么 像


调用了Student上的read方法。这就是多态性的作用。您可以执行该任务,因为学生是个人,但运行时足够聪明,可以知道p的实际类型是学生。

我认为多态性可以在没有继承的情况下存在。例如,您可以通过接口实现它,其中实现相同接口的对象可以在特定情况下相互代表。实际上,这是个人观点,我认为它们都来自一个更通用的概念名称继承,继承描述“是a”关系,接口描述“行为类似”关系。在这两种情况下,有些东西会被继承,但在这种情况下,你是对的:)
Person p = new Student();
p.read();