对于抽象类的认识

来源:互联网 发布:华南理工网络教育学费 编辑:程序博客网 时间:2024/04/27 05:55

如果一个concrete类Wrapper 继承了一个抽象类AbstractWrapper ,且这个子类override了其中的一个方法isCorrect()。

private final AbstractWrapper Wrapper = new Wrapper();

 

Wrapper.isCorrect() 调用的是子类的方法,而

Wrapper.stop()等调用的其他方法是调用的抽象类的方法。

 

实际调用的方法,是new关键后的类决定的,而不是由这里的AbstractWrapper 决定的。。。

private final AbstractWrapper Wrapper = new Wrapper();

我这个概念一直不清晰!!!

 

 

实际上,如果一个类中有一个方法是抽象的,那么这个类就是抽象的。

但是如果类被定义为抽象的,在这个类中,即可以有抽象方法,也可以有非抽象方法。

 

public File getString() {}

public abstract int stop(final String Path) throws IOException, InterruptedException;

 

方法getString是一个非抽象方法。这样的方法子类可以定义方法去override,也可以直接使用。按需求而定。

方法stop是一个抽象类。这样的方法子类中必须定义方法去override才能被调用。可以看到这个方法完全没有方法体而getString有{}。

 

而实际的代码是:

private final AbstractWrapper Wrapper;

public Task(final AbstractWrapper Wrapper) {
        this.graphWrapper = graphWrapper;
}

这就是所谓的面向接口编程,即程序代码并不关心真正实现的是什么类,只关心是否实现了公共接口规定的功能。

而实际上完全可以把抽象类当接口用。据guru说,在c++中是没有接口,只有抽象类。

另外设计模式中的template模式也是类似的概念。

我还没有开始看。。。羞愧啊。。。