Java 继承与接口的关系

简介:

  在看Netty中NioEventLoop的UML图时,感觉非常复杂,如下图所示:

  

wKiom1njEjSTKK1FAAD_bnD1apY230.png

    找不到重点,找不到主线,此时内心生无可恋。

   

    从而,激发出困扰了我很久的一个问题:到底继承与接口 啥关系?

   

    这个问题,前几天也请教过同事,也并没有说出什么关键点来。

    

    然后,对着此图沉思了良久,终于悟出一点自己的见解:【以下仅供参考】    

    

    1、继承,是一种血缘关系,是一个家族;是活的(感觉有生命特性);

       一个类只能有一个父类,可以直接调用/继承父类的API,也可以覆写父类的API


    2、接口,是一个工具,是一种辅助功能的体现;是死的(无生命特性,仅仅是一个工具而已);

       如一个类实现了接口,就好像一个人,穿上钢铁侠的衣服,能力大增;但它的本质还是一个人;

       或者说,一个人,具有了车,飞机之后,这个人的行驶速度极大提高;但,本质上还是一个人;

       这些钢铁侠的衣服、车、飞机、手机就是一个工具,一个具体组件,模块,或者说插件而已,是

       一种额外的辅助类的功能、或者认为是辅助人的功能而已,并没有改变人的根本属性。

       因此,类也是,同一个类可以同时实现不同的接口(如可以有车,或者穿钢铁侠的衣服)但是,

       本质上并没有变,只是增加/提高了额外的行为能力


  •  一句话总结:

       继承,是一种血缘关系的表现;

       接口,就是类的额外工具

    

   此时,重新对上面的图,进行修改,去掉接口(也就是去掉额外的功能,看本质),如下所示:

  

wKiom1njEjTxV_AdAADqEbsc08s046.png

     可以看出来,应该具有3条主线,然后再具体分析。



  • 感想:

     当我们学一样东西时,最好有自己的想法,见解;

     单纯的依赖别人的总结可能不能很好的理解;

     用自己的语言,说出来,可能才是最好的。

     这个过程可能需要翻阅大量的资料来总结整理,

     一旦成功,可以记忆很长时间。

     能不能给别人解释清楚,来验证你到底有没有真正掌握住。











本文转自故新51CTO博客,原文链接:http://blog.51cto.com/xingej/1972496 ,如需转载请自行联系原作者



相关文章
|
13天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
10 0
|
1天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
1天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
1天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
5 0
|
6天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
7天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
9天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
13天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
15天前
|
存储 Java
java接口和内部类
java接口和内部类
|
17天前
|
缓存 安全 Java
Java中函数式接口详解
Java 8引入函数式接口,支持函数式编程。这些接口有单一抽象方法,可与Lambda表达式结合,简化代码。常见函数式接口包括:`Function<T, R>`用于转换操作,`Predicate<T>`用于布尔判断,`Consumer<T>`用于消费输入,`Supplier<T>`用于无参生成结果。开发者也可自定义函数式接口。Lambda表达式使实现接口更简洁。注意异常处理和线程安全。函数式接口广泛应用于集合操作、并行编程和事件处理。提升代码可读性和效率,是现代Java开发的重要工具。
29 0