Java中类继承、接口实现的一些细节(长期更新)详解编程语言
前言
在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java 程序员应该也比较熟悉。不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作、学习中入手,总结一些细节性的内容,以更进一步 地掌握继承、实现的关系。现在只是写一些目前碰到的内容,以后只要想到了、碰到了任何继承、实现相关问题,都会保持更新此文。
接口A有void C()方法,接口B有int C()方法,则无法同时实现这两个接口
Java为了弥补类单继承的不足,引入了类多实现接口的机制,不过多实现某个接口也是有一定限制的,比如:
public interface A void C(); }
那么同时实现这两个接口是不可能的:
这个错误是无法被修复的。试想,类AB实现接口A和接口B,那么接口A里面的抽象方法和接口B里面的抽象方法参数列表都相同仅有返回值不同,类AB应该实现哪个呢?实现接口A的 void C() ,那么接口B的 int C() 怎么办?实现接口B的 int C() 那么接口A的 void C() 怎么办?因为 void C() 、 int C() 属于方法参数相同,返回值不同,这两个方法是不可以重载的,所以同时实现两个方法也不可能。因此,在这里Java只能报错了。
A是接口,B实现A,C继承B,则C也是A的子类
有一个接口A,B实现了A接口,C继承自B类,则C也是A的子类,看一下:
public interface A }
返回结果是true。这是一个不难理解的结论,想到求证这个结论是因为有一次在研究LinkedHashMap的时候:
public class LinkedHashMap K,V extends HashMap K,V implements Map K,V
既然LinkedHashMap已经继承了HashMap了,HashMap是Map的实现类,那为什么LinkedHashMap还要实现Map呢,岂不是多此一举吗?由此想到了会不会是因为继承了HashMap不代表LinkedHashMap是Map的子类所以LinkedHashMap要专门再实现一下Map,做了上面的实验,发现是我多虑了,可能Sun的开发人员就想这么写吧,呵呵。
父子类中有同名属性
这不是错误,只是会造成歧义而已,而且也可能会造成返回我们不想要的结果,主要原因可能是开发者对父类代码不熟悉所导致的(尤其是在父类定义的属性一大堆的场景下)。举个例子:
private int i; public Father() { } public Father(int i) { this.i = i; } public int getFatherI() { return i; } }
private int i; public Son(int i) { super(100); this.i = i; } public int getSonI() { return i; } }
Son son = new Son(50); System.out.println("Son getFatherI():" + son.getFatherI()); System.out.println("Son getSonI():" + son.getSonI()); }
运行结果为:
Son getFatherI():100 Son getSonI():50
提出这个问题是因为我们担心父子类的同名属性会不会存在覆盖的情况,从运行结果来看,完全不用担心这个问题。
一个实现类继承自一个抽象类并且实现了多个接口,那么必须实现所有未被实现的抽象方法
举个例子:
public interface InterfaceA void A1(); void A2(); }
public void A1(){} // 我实现了InterfaceA的A1()方法 public void B2(){} // 我实现了InterfaceB的B2()方法 abstract void C(); // 我自己定义了一个抽象方法 }
public void A2(){} // 我必须实现InterfaceA中未被实现的A2()方法 public void B1(){} // 我必须实现InterfaceB中未被实现的B1()方法 void C(){} // 我必须实现AbstractC中未被实现的C()方法 }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20550.html
cjava相关文章
- java pfx_如何在Java中读取.pfx文件的内容?
- java 异步调用接口_Java接口异步调用[通俗易懂]
- java中JDBC是什么?[通俗易懂]
- java webservice实现_JAVA WebService的实现方式
- java学生成绩管理系统
- java无法获取服务器上路径,JAVA获取服务器路径的步骤
- 【说站】java中HttpClient的错误处理
- 【说站】java接口中静态方法的继承
- object.hashcode的作用_java的hashcode方法
- Effective-java-读书笔记之类和接口
- java最全关键字
- java使用xquery_如何使用Java XQuery
- java接口简介
- Java学习笔记之二十二解析接口在Java继承中的用法及实例分析详解编程语言
- Java学习笔记之十七Java中普通代码块,构造代码块,静态代码块区别及代码示例分析详解编程语言
- Java学习笔记之七java函数的语法规则总结详解编程语言
- 实现Java程序操作MySQL数据库(java调用mysql)
- Linux下Java开发入门指南(linux下java开发)
- Linux调用Java实现编程快速开发(linux调用java)
- Java实现的Redis过期管理(redisjava过期)
- 面试前准备:Java技术和Redis快速入门(java面试redis)
- 机制Java实现Redis过期机制(redisjava过期)
- Java技术封装Redis,打造高效数据处理系统(java封装redis)
- Linux下Java命令:简介与基本用法(linux下java命令)
- 构建基于Java和Oracle的强大技术栈(java架构oracle)
- 学习Java编程,攻克Oracle难题(java学oracle)
- Java基础教程之接口的继承与抽象类