java的单继承机制

总结来说就是:
一个类,只能继承一个父类。
一个类,可以有任意个子类。

以下为摘记:
1.Java牛角尖【011】: Java中只支持单继承吗?
——http://blog.csdn.net/sunshinestation/archive/2009/06/23/4290451.aspx
又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子:

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 {

}


这同已经有问题了,这时会有编译时错误,原因很简单,方法的重载只能是相同的方法名,不同的输入参数;而对于这两个方法,它们具有相同的方法名,相同的输入参数,只是不同的返回参数,是不能作为重载方法的,所以对于编译器来说,这里是一个方法的重复定义,明显是不能通过编译的。

同样,这样的问题也存在于一个类同时实现多个接口的情况,所以,在这些情况下,我们必须注意一点,就是具有相同方法名,相同输入参数的方法,是不能出现在同一个类或接口中的。

2.http://www.jdon.com/jivejdon/thread/29451
sunxuezhen:为什么Java要使用单继承,而不多继承或双继承?
banq:降低复杂性是一个方面,实际上,在我们使用继承时,总是有一个主要方面,其他是次要方面,这样分清主次后,实现主要方面继承。

如果是多继承,使用者会根本不考虑实际场景情况,胡乱继承,反而违背OO精神,AOP就是解决其他次要方面的继承问题,AOP通过拦截和导引其他属性进入当前对象。

使用单继承,会让我们更加珍惜父类,不要随便使用继承,因为一个类继承了另外一个类,这个就可能丧失继承其他类的权力,如果随着业务变化,当前类找到了它真正的主类(通常是业务主类),这时系统就变得尴尬了,无法拓展了。

Java特点就是融合了一定设计场景进入语言,总是需要在一定前提下使用Java的一些语言特点,这也是Java很多特点是双刃剑的原因,剑走偏锋往往是高手所为,所以,用java做OO相当于拿到一把很有灵性的剑,剩余在于使剑的人,他是否有一定武功基础,他是否有灵性,他是否知道模式。

C#两者都支持,这和.NET一贯路线一样,就会让差的好的都能用他,那想达到随心所欲地步就差了一点。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值