有2个类A,B;A是个抽象类,定义了一个方法x;B是一般类,A,B没有关系
如何在B里调用A类中的方法x?

解决方案 »

  1.   

    不是直接 call 就是了, 抽象类只是说你不能直接创建一个实例,你需要一个派生自它的Concrete子类才能创建实例,这个Concrete 子类应该实现了所有 abstract 方法,如果没有实现或它实现了但也定义为 abstract 类, 那么依然不能创建一个实例,一直将这种抽象关系传递下去,直到一个Concrete 类才能 new 操作 。如果你已经有了一个抽象类 A 的实例,这表明它肯定是一个 派生自 A 的 Concrete 子类 new 出来的对象实例,只是没有人告诉你它本来的名字是什么,例子: 你是北京人,到了外国朋友把你介绍给老外时
    情形              --> 比如:
    只说你是中国人                        ---  抽象类 A ,
    你喜欢哪个菜系?(牛排,火腿,川菜,湘菜还是别的?) ---  类A 的抽象方法,
    老外现在碰到一个中国人就问你比较喜欢吃哪个风味菜?
     老外的这个问题在他并不知道你是四川人还是湖南人或是广东人时他会得到答案么?老外没弄明白你具体是四川人还是湖南人就好比是抽象方法 A.x 方法, 老外是 B 的对象实例,
    它肯定能得到你的答案,因为你作为中国人是个抽象类,但是你现在已经存在,就表示你肯定不仅仅是中国人,而且是中国人的一个具体子类(湖南或四川人) ,只是当老外从来没有听说过川菜或湘菜这个词汇时,可能觉得不可思议, 但是他总是可以得到一个答案的。 也就是说你B 只要判断 
    if( A !=null  ) A.x(); 就行了。对老外来说,他要完成饮食状况调查任务:
    出发前:( 设计阶段或应用早期有部分需求)
    B 认为只要找到一个 A 的对象,只要存在就问: 你喜欢吃什么菜?A 只要是会吃菜的当然会回答。
    对 B 来说, 出发调查前列好任务,
    这叫“抽象”- 共性(事先并不知道具体实现中人们会回答什么)。出发后: ( 实现阶段或后期扩展功能)
    B 现在在欧洲碰到一个人A 问 你吃啥 ? 
      欧洲人回答 : 牛排
    然后 来到中国回我吃啥,我吃“川菜”(老外从没听过“川菜”,没关系,完成调查任务就行了)。调查到“川菜”对老外来是个扩展功能,这个能很好的挂到已有的调查设计表实施中。
    在不同的环境中老外的调查都能完成任务,这叫“多态”, 具体问题具体分析。
      

  2.   

    humanity(骷髅也跳舞) ( ) 说得好~~~~~~~~~~~~~~~~