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

抽象类-接口-实现

作者: 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();
        }
    }
    

    相关文章

      网友评论

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

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