抽象类与接口

2018-08-03  本文已影响6人  Rreply

抽象类

抽象类即使用abstract修饰的类

作用

抽象类是从多个具有相似特征的类中提取出其中共同的部分,然后把这些部分组成一个抽象类。抽象类大多数是作为一个模板,避免子类在设计上的随意性。同时在抽象类中普通方法也能够起到代码复用的作用。

abstract class Person{
    public void everyNeedToDo() {
        System.out.println("吃喝玩乐");
    }
    abstract void work();
}
public class Student extends Person{
    @Override
    void work() {
        System.out.println("上课听讲,回家复习,周末考试");
    }
}
class Colder extends Person{
    @Override
    void work() {
        System.out.println("与产品斗智斗勇,撸代码");
    }
}

学生与程序员共同的部分是都要吃喝拉撒,这是每个人类都要做的事情,因此把它提取出来作为抽象类的普通方法,然而每个人要完成的工作都是不一样的。这不一样的部分就在抽象类中定义成抽象方法,最终在子类中根据实际情况进行实现。
抽象类与接口的最大不同之处在于他们与子类的关系上。
对于抽象类来说,子类是其模板的实现,是抽象类的继承,是“is a”的关系。也可以说子类就是抽象类,子类和抽象类的本质是一样的,不同的只是不同子类对于抽象方法的实现。比如学生,程序员就是Person一样,但是它们的工作任务是不一样的。
然而对于接口来说,实现类与其之间并没有继承的关系。接口更多的是作为一种扩展规范,其与子类的关系并没有那么密切。下面介绍接口的相关知识。

接口

接口定义了某一批类所需要实现的规范,接口不关系这些类的内部实现细节,只要其实现接口中定义的抽象方法。接口定义的是多个类共同的公共行为规范,这些行为是与外界沟通的渠道。

abstract class Person{

    public void everyNeedToDo() {

        System.out.println("吃喝拉撒");
    }

    abstract void work();

}

interface drive{

    void driveCar();
    
    default void own() {
        System.out.println("拥有驾驶证");      //默认方法
    }
}
public class Student extends Person implements drive{

    @Override
    void work() {
        System.out.println("上课听讲,回家复习,周末考试");
    }

    @Override
    public void driveCar() {
        System.out.println("驾驶电动车");
    }
}
class Colder extends Person implements drive{

    @Override
    void work() {
        System.out.println("与产品斗智斗勇,撸代码");
    }

    @Override
    public void driveCar() {
        System.out.println("驾驶小汽车");
    }
}

如上述代码所示,Student和Colder都实现了drive这个接口,也就代表了他们都拥有驾驶这个技能,通过对于接口中抽象方法的不同实现,他们的技能也是不一样的,学生骑电动车,程序员开车。
这里也能一定程度上看出接口与抽象类的区别。
接口是对象增加某种技能的方法,这种技能可以是很多个,有或者没有都没关系。

上一篇 下一篇

猜你喜欢

热点阅读