接口和抽象类的特点与使用

接口类的特性:

  1. 接口中的方法会被隐式的指定为 public abstract(使用其他修饰符会报错)

  2. 接口中所有变量会被隐式的指定为 public static final 变量(使用其他修饰符会报错)

  3. JDK 8 后,接口中可以加入 static 和 default 修饰的非抽象方法,它们分别使用类名其实现的子类 调用

抽象类的特点:

  1. 抽象类不能被实例化,所以抽象类必须被继承,才能被使用

  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类

  3. 继承抽象类的子类一定会用到父抽象类的构造器。抽象类默认有空参构造器,其继承的子类会默认使用空参构造器。如果抽象类中只有含参数的构造器,那么其继承的子类的构造器中,必须要使用 super(…) 指明抽象类的构造器


接口与抽象类的配合使用:

  1. 接口中的抽象方法,对于实现它的子类,都要求重写它的抽象方法。

    当在一个接口中,加入一个抽象方法时,他的子类都必须去实现新的抽象方法。

  2. 抽象类中既可以有抽象方法,也可以有非抽象方法。对于继承它的子类,具有它的非抽象方法,但必须重写它的抽象方法。

    当在一个抽象类中,加入一个非抽象方法时,那么它的所有子类都同时具有了这个新方法。

  3. 接口和抽象类的配合使用,就可以实现缺 省适配置模式

    扫描二维码关注公众号,回复: 8694306 查看本文章

    用抽象类实现接口,在接口中,定义出抽象方法,在抽象类,实现默认的抽象方法。
    对于其所有子类,继承抽象类,如果需要子类完成的方法,不在抽象类中实现,则所有子类都需要去实现抽象方法;如果不需要子类去实现的方法,可以在接口中定义、在抽象类中实现,则子类就具有了这个新方法。

interface interfac {
    //接口中只能定义方法
    void methodIn();
}

abstract class abstrac implements interfac {
    //在抽象类中,可不用实现接口中的方法
    @Override
    public void methodIn() {

    }

    //可以对方法进行实现
    public String methodAb() {
        return "methodAb";
    }

    //可以使用抽象方法
    abstract public String methodAb1();
}

class myClass extends abstrac implements interfac {

    //本类 或者 其父类必须实现接口中的方法
//    @Override
//    public void methodIn() {
//
//    }

    //必须实现继承的抽象类中的抽象方法
    @Override
    public String methodAb1() {
        return null;
    }
    //可以使用抽象类中定义好的方法
    public String myMethod() {
        return this.methodAb();
    }
}

接口与抽象类的使用可参考

发布了91 篇原创文章 · 获赞 54 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/BigBug_500/article/details/103657649