美文网首页
抽象类-接口-实现

抽象类-接口-实现

作者: Raral | 来源:发表于2021-11-24 16:54 被阅读0次

抽象类

分析事物时, 发现了共性的内容,就出现向上抽取,但是如果父类 的方法功能与子类不同,那么这时就不抽取方法主体,这样抽取出来的方法 就是抽象方法

例子:

抽象类父类

public abstract class Parent {

    public Parent() {
        System.out.println("parent 构造函数");
    }

    //抽象方法
    public abstract void walk();

    //普通方法
    public void speck() {
        System.out.println("speck");
    }

}

子类

public class Child extends Parent {

    public Child() {
        System.out.println("child 构造函数");
    }

    @Override
    public void walk() {
        System.out.println("child 的walk方法");
    }

    public void study() {
        System.out.println("study");
    }
}

测试:

public class Test {
    public static void main(String[] args) {
//        Parent parent = new Parent();//编译错误
        Child child = new Child();
        child.speck();
        child.study();
        child.walk();
    }
}

注意事项

  1. 抽象类不能创建对象,如果创建了,编译无法通过而报错,只能创建其非抽象子类的对象

  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的

  3. 抽象类中.不一定包含抽象方法,但是有抽象方法一定要是抽象类

  4. 抽象类的子类,必须重写抽象父类中所有抽象方法,否则,编译无法通过而报 错, 除非该子类也是抽象类

接口实现类


//这是一个接口
public interface Parent {
    public void eat();
}



//实现类
public class ParentImpl implements Parent {

    //实现接口的方法
    @Override
    public void eat() {
        System.out.println("实现类 eat");
    }
    //实现类自己的方法
    public void sleep() {
        System.out.println("实现类 自己的");
    }
}



public class Test {
    public static void main(String[] args) {
//        Parent parent = new Parent();//编译错误
        ParentImpl parent = new ParentImpl();
        parent.eat();
        parent.sleep();
    }
}

使用总结:

  1. 实现类必须实现接口的所有方法,但是实现类可以有接口没有的方法(方法数量:实现类>接口)
  2. 实现类的方法修饰符的权限必须大于接口的方法修饰符,也就是实现类的方法的可见性>接口的方法的可见性。
  3. 实现类可以有自己的属性,比如smallXeon有num,name属性。
  4. 为什么使用接口,最大目的也应该是代码重用吧,对于业务逻辑一样的类(内部实现不一样),可以直接定义接口,然后不同的业务使用不同的实现类就好了

抽象类-接口-实现类

抽象类:实现抽象层的业务方法。一般是诸如生命周期,业务流程之类的,尽量不涉及到具体实现。

接口:定义如何使用。包括外部程序如何调用,以及自己的内部程序之间如何调用。

实现类:关注于具体问题实现。

例子:退款流程需要兼容到一手退款流程

  • 原始类
//退款类(原始类:最底层的方法逻辑)
public class Refund {
    public void refund() {
        System.out.println("原始的退款--");
    }
}
  • 目标接口
//一手退款接口(目标接口:最期待的方法)
public interface IFirstRefund {
    //最期待的方法
    public void firstRefund();
}
  • 适配器
//适配类(兼容到 一手退款的):继承了原始类,又实现了目标接口的方法
public class Adapter extends Refund implements IFirstRefund {

    //目标接口要求调用firstRefund()这个方法名,但源类Refund没有方法firstRefund()
    //因此适配器补充上这个方法名
    //但实际上firstRefund()只是调用源类Refund的 refund()方法的内容
    //所以适配器只是将 refund()方法作了一层封装,封装成Target可以调用的firstRefund()而已
    @Override
    public void firstRefund() {
        System.out.println("自己一手退款逻辑--");
        //自己的指定业务逻辑
        //----------

        this.refund();
    }
}

  • 验证
public class Test {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.firstRefund();
    }
}

相关文章

  • 建造者模式

    建造者抽象类或接口 建造者抽象类或接口实现类 产品抽象类或接口 产品抽象类或接口实现类 使用

  • 访问者模式

    元素抽象类或接口 元素抽象类或接口实现类 访问者抽象类或接口 访问者抽象类或接口实现类 场景使用

  • 高端基础面试题

    接口和抽象类的区别 比较点抽象类接口默认方法抽象类可以有默认的方法实现java 8之前,接口中不存在方法的实现实现...

  • 装饰者模式

    装饰角色抽象类或接口 装饰角色抽象类或接口实现类 装饰类抽象类 装饰类抽象类具体实现类 场景使用

  • 接口跟抽象类的对比

    抽象类和接口的区别抽象类被子类继承 接口被类实现接口可以做方法生命 抽象类可以做方法生命 也可以做方法实现接口中定...

  • Android面试题

    接口和抽象类的区别: 抽象类只能单继承,接口能多实现(一个类只能继承一个抽象类,但是能实现多个接口) 抽象类是一个...

  • 桥梁模式

    实现化角色抽象类或接口 实现化角色抽象类或接口实现类 抽象化角色抽象类 具体抽象化角色 场景使用

  • 抽象类与接口

    抽象类与接口的最大区别一就是是否关心实现,如果关心实现方式就用抽象类,不关心实现方式就是接口。抽象类可以有实现方式...

  • java基础

    抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。而普通类即非抽象类则必须实现接口里的全部方法。

  • java面试题集(三)

    32、接口是否可继承(extends)接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体...

网友评论

      本文标题:抽象类-接口-实现

      本文链接:https://www.haomeiwen.com/subject/sjantrtx.html