multi-inherite
来源:互联网 发布:oracle sql convert 编辑:程序博客网 时间:2024/06/06 07:05
multi-inherite -----多继承
虽然说OO都不推荐这样的一种设计风格,但是他们始终都给出了他们各自的实现方式.C++是直接支持来自于类的多继承,而JAVA则是通过interface间接地支持了一下,当然了,可以说避免不少的混乱.
我这里要讲的东西呢是关于多继承中的冲突问题
一、属性冲突问题
问题场景:如果interface有一个变量是i,super class同时也有一个变量是i.同时都是public或者对子类可见.那么子类在访问这个变量的时候会出现什么问题呢?
public class AttributeTestExtendClass extends AttributeTestClass implements AttributeTestInterface
...{
public static void main(String[] args)
...{
AttributeTestExtendClass test=new AttributeTestExtendClass();
//System.out.println(test.i); //在这里,我们可以在IDE中看到一个错误,下面来分析这个错误
}
}
class AttributeTestClass
...{
public int i=0;
}
interface AttributeTestInterface
...{
int i=0;
}
有人的第一反应是interface里面居然能写变量...!!!陆陆,你瞎闹呢吧,真不好意思,我们老师讲的时候也和你一样是这么说的,但是真实的情况是,interface中间确实是有,但是他是默认为static final的一个变量.这样在同一个类AttributeTestExtendClass(好吧..名字这么长让大家见笑了)中就有2个i属性,冲突了.但是奇怪的是,我们只有在调用他的时候才能得到这个冲突的信息,不知道是怎么想的...或者换句话说是,两者并存是可以包容的,但是你调用的时候,2个i,JVM不知道要调用哪一个,是语句存在了二异性.
有1,当然有2了.继续看下去吧
二、方法的冲突问题
问题场景:问题的场景还是相似的.
如果一个super class和一个interface拥有连signature都一样的方法,而子类没有覆盖这个方法,怎么办.
如果是覆盖了的话,应该不会有冲突吧,毕竟都给2者都被覆盖掉了.如果没有被覆盖呢,怎么办呢...interface又没有方法体,那我们就按照super class怎么说就怎么做好了嘛...也许你会说....说的好,你真聪明,JAVA也确实是这么做的.当然有他的合理性.但是我想说的是如果是C++呢?这样的问题是否就这么简单的说清楚了呢?要知道人C++可以继承2个super class,这两个可都可以有方法体
这样的问题还是留给自己想想吧,末了,再说一次很废话的话,能不用就不要用多继承,不是啥好鸟
- multi-inherite
- Perl Inherite
- Perl Inherite 2
- multi-
- css默认被后代inherite的属性列表
- Multi Touch
- multi-thread
- > Multi Transactions
- multi-touch
- Multi-Xip
- multi segment
- Multi-pane_Layouts
- Multi-tenancy
- Multi-Thread
- multi thread
- Multi-task
- Multi-threading
- Multi injection
- 学习PL/SQL之六:处理异常
- Asp.Net防止刷新重复提交数据小记(转自网上)
- XML详解----Schema
- 学习PL/SQL之七:子程序
- asp.net 防止重复提交
- multi-inherite
- symbian各平台sdk的版本标识宏
- 服务并未及时响应启动或控制请求
- 用http-equiv='refresh' 添加等待提示
- 《叩开C#之门》系列之五:const、readonly和static
- 將數據綁定到窗體上單獨的控件
- 深入理解 void*
- Tomcat常用的配置文件
- TreeView控件客户端脚本操作