• Java学习笔记之---比较接口与抽象类


    Java学习笔记之---比较接口与抽象类

    抽象类是描述事物的本质,接口是描述事物的功能

    接口与抽象类的异同

    1.一个类只能继承一个父类,但是可以有多个接口

    2.抽象类中的抽象方法没有方法体,但是可以有非抽象方法;接口中的方法没有方法体,但是可以通过default或者static拥有方法体

    3.如果子类不能重写父类中的抽象方法和接口中的方法,可以把子类变为abstract修饰的

    4.子类重写父类的方法时形参不能改变,返回值类型不能改变

    5.抽象类中可以包含构造函数,但是接口中不能出现构造函数

    6.接口中只能定义静态常量,而抽象类中即可以定义静态常量属性,也可以定义普通属性

    7.由default或者static修饰的接口内的方法可以不被子类重写,也可以有方法体

    举一个例子:保温杯是水杯,所以水杯应该设计成抽象类,保温杯的功能是保温,所以保温应该设计为接口

    实例:杯子类为抽象类,保温和喝为接口,保温杯为子类

    public abstract class Cup {
        private static String name;
        private String color;
        //抽象类中可以包含构造函数,但是接口中不能出现构造函数
        public Cup(){
    
        }
        public Cup(String name,String color){
            this.setName(name);
            this.setColor(color);
        }
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
        public abstract  void decorate();
        //抽象类中的抽象方法没有方法体,但是可以有非抽象方法
        public void lid(){
            System.out.println("杯子有盖子");
        }
    }
    public interface Drink {
    
        //由default或者static修饰的接口内的方法可以不被子类重写,也可以有方法体
    
        public default void eat(){
    
            System.out.println("杯子可以喝水");
    
        }
    
    }
     
    public interface Vacuum {
    
        //接口中只能定义静态常量
    
        static int i=1;
    
        public void warm();
    
    }
     
    //一个类只能继承一个父类,但是可以有多个接口
    
    public  class VacuumCup extends Cup implements Drink,Vacuum{
    
        public VacuumCup(){
    
        }
    
        public VacuumCup(String name,String color){
    
            super(name,color);
    
        }
    
        @Override
    
        //子类重写父类的方法时形参不能改变,返回值类型不能改变
    
        public void decorate(){
    
            System.out.println("装饰桌子");
    
        }
    
        @Override
    
        public void warm(){
    
            System.out.println("杯子可以保温");
    
        }
    
    }
    
    class CupTest{
    
        public static void main(String[] args){
    
            Cup a=new VacuumCup("aa","red");
    
            System.out.println(a.getName()+":"+a.getColor());
    
            a.decorate();
    
            ((VacuumCup) a).warm();
    
            a.lid();
    
        }
    
    }

    运行结果:

    aa:red

    装饰桌子

    杯子可以保温

    杯子有盖子

  • 相关阅读:
    LeetCode Notes_#705_设计哈希集合
    LeetCode Notes_#706_设计哈希映射
    【问题记录】用坚果云同步小书匠数据库发生冲突
    Java设计模式5
    Java设计模式4
    Java设计模式3
    Java设计模式2
    Java设计模式1
    tiantian1412/NTU-HsuanTienLin-MachineLearning
    Jing--Li / book
  • 原文地址:https://www.cnblogs.com/dyddzhp/p/11177079.html
Copyright © 2020-2023  润新知