is-A继承?Has-A?

教程把is-A和Has-A放在一起,我还以为java支持简单的方法能把Has对象的方法导出呢。。

 

extents  implements

要试一下。

不知道狗和汽车为什么总是被选出来举例。

 

package Language;

/**
 *
 * 面向对象接口
 * @author y
 */
public interface IFace2Object {
    String getClassKey();
    Boolean AllowMutilInhert();
}
package Language;

/**
 *
 * 开发语言基类
 * @author y
 */
public abstract class ProgramLanguage {
    public abstract String getMyType();
}
package Language;

/**
 *
 * C语言
 * @author y
 */
public class PL_C extends ProgramLanguage {

    @Override
    public String getMyType() {
        return "C";
    }
    
}
package Language;

/**
 *
 * @author y
 */
public class PL_Cpp extends ProgramLanguage implements IFace2Object {

    @Override
    public String getMyType() {
        return "C++";
    }

    @Override
    public String getClassKey() {
        return "class";
    }

    @Override
    public Boolean AllowMutilInhert() {
        return true;
    }
    
}
public class PL_Java extends ProgramLanguage implements IFace2Object {

    @Override
    public String getMyType() {
        return "Java";
    }

    @Override
    public String getClassKey() {
        return "class";
    }

    @Override
    public Boolean AllowMutilInhert() {
        return false;
    }
    
}

 

练练写法就行了,就不写测试代码了,没必要。

@Override不知道做什么用的,先看吧。难道是类似 c++11的override关键字?

 

Java的方法重写,不必在父类中声明,反而是只有final的方法不能被重写。

Super可以直接调用父类方法,而不必要知道父类名。这很有用。更改父类不必要搜索父类名,在C++中则很烦。

不过c++ 可以typedef BaseClassName BaseClass,来简化。

 

函数的重载没什么说的,我只好奇,子类重载父类中的函数时, 调用子类的父类函数接口,能否正常调用。C++是不行的,看你的了,java。

package Language;

/**
 *
 * @author y
 */
public class PL_Cpp extends PL_C implements IFace2Object {

    public String getMyType(Boolean bCpp){
        return bCpp ? "C++" : "C";
    }

    @Override
    public String getClassKey() {
        return "class";
    }

    @Override
    public Boolean AllowMutilInhert() {
        return true;
    }
    
    public static void main(String[] args){
        PL_Cpp tp = new PL_Cpp();
        String sType = tp.getMyType();
        System.out.println("Cpp Default Type = " + sType);
    }
    
}

输出:

run:
Cpp Default Type = C
成功构建 (总时间: 0 秒)

 

可以调用哦。

 

在C++中,对父类非虚函数的重载叫重写,JAVA似乎不这么叫。

JAVA中纯虚函数不能实现。

 

接口的继承也用extends

posted @ 2015-12-23 21:27  杨海龙  阅读(408)  评论(0编辑  收藏  举报