Java牛角尖【011】: Java中只支持单继承吗?
2009-06-23 08:09
337 查看
又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子:
很明显,上面的代码是没有问题的。所以标题中的应该是不严谨的,严格的说应该是Java中类的继承只支持单继承。
当然,这样我们自然会想到多继承的问题,如果两个父接口中有同样的方法,那么子接口中怎么办呢?
其实这个问题不用担心,因为接口只是对方法的一个声明,并没有具体的实现,所以子接口中的方法属于哪个父接口并不重要,重要的是当实现这个接口的时候只需有一个该方法的实现就可以了,这个方法的实现应该同时属于两个父接口。
很明显,这不是真正的问题,真正的问题是如果在两个父接口中分别定义了名称和参数都相同,而返回结果却不同的方法:
这同已经有问题了,这时会有编译时错误,原因很简单,方法的重载只能是相同的方法名,不同的输入参数;而对于这两个方法,它们具有相同的方法名,相同的输入参数,只是不同的返回参数,是不能作为重载方法的,所以对于编译器来说,这里是一个方法的重复定义,明显是不能通过编译的。
同样,这样的问题也存在于一个类同时实现多个接口的情况,所以,在这些情况下,我们必须注意一点,就是具有相同方法名,相同输入参数的方法,是不能出现在同一个类或接口中的。
下一篇: Java牛角尖【012】: JDBC开发时为什么要用Class.forName("")
interface IP1 { } interface IP2 { } public interface ISub extends IP1, IP2 { }
很明显,上面的代码是没有问题的。所以标题中的应该是不严谨的,严格的说应该是Java中类的继承只支持单继承。
当然,这样我们自然会想到多继承的问题,如果两个父接口中有同样的方法,那么子接口中怎么办呢?
interface IP1 { public void test(); } interface IP2 { public void test(); } public interface ISub extends IP1, IP2 { }
其实这个问题不用担心,因为接口只是对方法的一个声明,并没有具体的实现,所以子接口中的方法属于哪个父接口并不重要,重要的是当实现这个接口的时候只需有一个该方法的实现就可以了,这个方法的实现应该同时属于两个父接口。
很明显,这不是真正的问题,真正的问题是如果在两个父接口中分别定义了名称和参数都相同,而返回结果却不同的方法:
interface IP1 { public void test(); } interface IP2 { public String test(); } public interface ISub extends IP1, IP2 { }
这同已经有问题了,这时会有编译时错误,原因很简单,方法的重载只能是相同的方法名,不同的输入参数;而对于这两个方法,它们具有相同的方法名,相同的输入参数,只是不同的返回参数,是不能作为重载方法的,所以对于编译器来说,这里是一个方法的重复定义,明显是不能通过编译的。
同样,这样的问题也存在于一个类同时实现多个接口的情况,所以,在这些情况下,我们必须注意一点,就是具有相同方法名,相同输入参数的方法,是不能出现在同一个类或接口中的。
下一篇: Java牛角尖【012】: JDBC开发时为什么要用Class.forName("")
相关文章推荐
- java不支持多继承的原因
- 牛客网Java刷题知识点之Java为什么不能支持多继承,但可以用接口来间接实现多继承
- Java不支持多继承的原因
- java为什么不支持多继承
- 为什么Java不支持多继承
- Java不支持多继承,但是。。。
- Java为什么不支持多继承
- Java牛角尖【006】: 匿名内部类可以继承其它类吗?
- Ajax - JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子
- Java为什么不支持多继承
- 为何Java 类不支持多继承?
- java支持多继承吗?
- 为什么Java不支持多继承?
- Java支持多继承吗?
- 为什么Java不支持多重继承?
- Java中Observable不支持多继承的解决方法
- java为什么不支持多继承
- 为什么Java不支持多继承,却搞了个Interface出来?
- java不支持多继承思考
- java为什么不支持多继承