• java基础之接口和抽象类


    接口和抽象类

    抽象类

    抽象方法的声明没有方法体。

    abstract void func();
    • 1

    包含抽象方法的类叫做抽象类

    public abstract class Basic{
       abstract void func();

        protected abstract void func1();

        public abstract void func2();
    }
    • 1

    抽象方法默认是public的,不可以设置为private

    抽象类总结
    • 抽象类不能被实例化,应该由实现了其抽象方法的子类来进行实例化
    • 抽象方法必须由子类来重写
    • 只要包含了一个抽象方法的类,该类就是抽象类
    • 抽象类中可以包含具体的方法,当然也可以不包含抽象方法
    • 子类的抽象方法不能与父类的抽象方法同名
    • abstract不能与final同时修饰一个类(因为final不可被继承,而abstract必须由子类来继承实现)
    • abstract不能与private、static、final或native同时修饰一个方法

    接口

    java8之前的接口只允许有抽象方法,是一个完全抽象的类,没有提供任何实现
    接口中的属性被隐式指明为public static final

    public interface Inter{
     int m();
    }
    • 1

    java8之后允许接口包含默认方法和静态方法
    默认方法允许在不破坏已使用接口的代码的情况下,在接口中新增方法,必须用default修饰符来修饰方法

    public interface Inter{
     int m();
     default void newMethod(){
      System.out.println("新增方法");
     } 
    }
    • 1

    如果两个接口中都提供了相同名称且参数相同的默认方法,在同时实现这两个接口的时候需要让程序员来解决这个二义性,即需要覆盖该方法来解决默认方法的冲突

    静态方法可以将工具功能放在接口,从而操作接口

    public interface Operations{
     void execute();
     
     static void runOps(Operations... ops){
      for(Operations op : ops){
       op.execute();
      }
     }
      
      static void test(){
            System.out.println("接口静态方法");
        }

        static void main(String[] args) {
            test();
        }
    }
    • 1
    接口总结
    • 在java8之前只能有抽象方法,java8之后可以有默认方法和静态方法
    • 接口不能有构造器
    • 接口的方法默认是public的
    • 接口中的属性全部为public static final修饰
    • java8之前接口没有main方法,java8之后可以有main方法

    抽象类和接口比较

    相同点
    • 接口和抽象类都不能实例化
    • 接口和抽象类都不能独立运行
    • 接口和抽象类中都可以有属性
    不同点
    • 可以实现多个接口;但只能继承一个抽象类
    • 接口只能包含静态变量,不支持对象状态,成员变量默认是public static final的;抽象类可以包含实例变量,可以是public的也可以是private的,且可以包含非final的,非抽象方法可能引用这些变量
    • 接口不需要在子类实现默认方法,默认方法可以引用其他接口的方法;抽象类必须在子类中实现抽象方法
    • 接口没有构造器;抽象类可以有构造器
    • 接口方法隐式为public;抽象方法可以是public的也可以为protected
    • 接口中的所有方法隐式为抽象的(java8出现了默认方法,为非抽象的);抽象类则可以同时包含抽象方法和非抽象方法
    • 抽象类是对事物的抽象,接口是对行为的抽象

    https://zhhll.icu/2020/java基础/面向对象/7.java基础之接口和抽象类/

    本文由 mdnice 多平台发布

  • 相关阅读:
    css进阶知识点速览
    过去几个月,他们把数字化融进了中国经济的毛细血管
    D. Tournament Countdown(交互题)
    字符串的转换路径问题
    我居然不知道Vue3可以使用hooks函数实现代码复用?
    【RuoYi-Vue-Plus】学习笔记 38 - OSS模块(八)V4.2.0+ 版本OSS文件上传流程
    间隔连续问题
    uniapp项目实践总结(十五)使用websocket实现简易聊天室
    构建可维护的大规模应用:框架架构的最佳实践
    机器学习自学成才的十条戒律
  • 原文地址:https://blog.csdn.net/Lxn2zh/article/details/133789721