关于Java中继承和接口的理解

关于Java中继承和接口的理解

Java语言中,为了实现代码重用,设计了继承这一机制,但是,其设计成单继承,这样设计是有原因的,如下图:

Figure1:deadly diamond of death

此图问题称为菱形问题(diamond problem),就是说,当A的子类B和C同时实现了A中的方法,则同时继承了B和C的子类D在调用该方法时会出现混乱,无法得知该调用哪一个方法。

既然不能实现多继承,我们就会考虑把很多方法就写在父类里,或者继承抽象类,实现其方法,但是,这样会导致一个问题,比如说,子类不应该具有父类的某些方法,那么,我么为了解决这个问题,还必须在子类中重写该方法(但是只能在该方法中什么也不干),这样的设计是很不好的。

那么接口就来了,它解决了Java的多继承问题,可以这样理解,接口就是纯粹的抽象类(其中的方法都是public且是抽象的),我们也可以认为接口是“另一种形式的继承(接口继承)”,我们可以这样思考面向对象编程,其本质就是面向契约(contract)编程或者说是面向协议(protocol)编程,就像继承,子类和父类约定好规则,子类然后去实现或者继承,接口刚好满足了这一点,同时它保证了只要实现了该接口的类,其返回的属性都是一致的,这样就保证了其一致性。同时,它避免了单继承的不足,父类中没有提供子类需要的方法(一般来说,父类提供公共的一些方法),不同的子类可以通过实现不同的接口来实现自己独特的方法,这样也保证了子类的差异性。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-02 10:22:26

关于Java中继承和接口的理解的相关文章

关于Java中继承多接口同名方法的问题

在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: 1 interface A{ 2 void fun(); 3 } 4 interface B{ 5 void fun(); 6 } 7 interface C extends A,B{ 8 9 } 10 public class Test implements C{ 11 @Override 12 public void fun() { 13 System.out.println("hehe&quo

我如何理解Java中抽象类和接口

在面试中我们经常被问到:Java中抽象类和接口的区别是什么? 然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦:一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像把标准答案熟练的说出来一样. 抽象类和接口这篇文章讲到了他们的区别和联系,它们确实有很多相似的地方,但是从本质上看,或从语言的设计角度来看,这不是它们最本质的区别. 不卖关子,我个人对这两个的理解: 类是具体实例的抽象,比如一个json字符串的抽象:而抽象类就是类的抽象:接口就是抽象类的抽象,接口

java中抽象类与接口的区别

转自: http://blog.csdn.net/tp7309/article/details/10452445 二者的区别快忘得差不多了,从别处看到这文章感觉写的不错,正好复习复习,也给大家分享一下. 抽象类 abstract class 包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员变量和方法.所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法.当然抽象方法是一定要有的. 抽象类是用于单一继承的,不能实例化.而继承类一定要实现抽象方法,因为抽象

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

Java中继承,类的高级概念的知识点

1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩展父类的属性和方法 C.父类的属性和方法可用于子类 D.设计应用程序变得更加简单 3. 如何判断类具有继承关系? 类与类的关系:  a. has—a(组合关系) b. is—a(继承关系) 4. Java中继承的实现(关键字:extends)   关键字extends出现在类声明时的类名后,exte

JAVA 中BIO,NIO,AIO的理解

JAVA 中BIO,NIO,AIO的理解 博客分类: 网络编程 [转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词.如有不足之处,还

【转】C#中对IDisposable接口的理解

IDisposable接口定义:定义一种释放分配的资源的方法. .NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,比如你在对象的实现代码中使用了一个COM对象 最简单的办法可以通过实现Finalize()来释放非托管资源,因为GC在释放对象时会检查该对象是否实现了 Finalize() 方法. 有一种更好的,那就是通过实现一个接口显式的提供给客户

Java 中的集合接口——List、Set、Map

Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组跟集合有什么区别: 数组:长度固定,遍历速度快 可以存储基本类型和引用类型: 集合:长度不固定,只能存储引用类型对象: 从数组跟集合的特点我们很明显的看出,数组有一定的局限性,如果我们需要不定期的往我们的数据中存储数据,数组就满足不了我们的要求. Java集合框架提供了一套性能优良.使用方便的接口和

Java中的Serializable接口和transient关键字

Java中的Serializable接口和transient关键字 Table of Contents 1. 向memcached中放数据时遇到NotSerializableException异常 2. 问题排查和解决 3. 总结 1 向memcached中放数据时遇到NotSerializableException异常 项目中用到了memcached缓存,存储客户的组织结构,以便提高系统性能.之前系统运行正常,近期为了和Portal对接,更新了涉及到组织结构的jar包(由公司产品部门维护),更