美文网首页
OnJava8笔记4 -- 抽象类和接口

OnJava8笔记4 -- 抽象类和接口

作者: 给点阳光我就灿烂_ab56 | 来源:发表于2020-04-17 15:40 被阅读0次

    抽象类和接口

    抽象类

    • 被abstract修饰的方法为抽象方法,只能声明,不能有具体实现,具体实现在子类中
    • 一个类中只要有一个abstract方法就得声明为抽象类
    • 抽象类不能被创建实例,会编译错误
    • 可以将一个不包含抽象方法的类声明为抽象类,这样做是为了阻止类的具体实例的创建
    abstract class Basic {
        abstract void unimplemented();
    }
    
    • 抽象类的子类必须为所有抽象方法提供具体实现。如果不这么做,新的子类就必须也要声明为抽象类,同时方法也要声明为抽象方法

      abstract class Basic2 extends Basic {
          int f() {
              return 111;
          }
      
          abstract void g() {
              // unimplemented() still not implemented
          }
      }
      
    • 抽象类中的抽象方法默认为public权限,且只能使用public 和 protected 修饰抽象方法,provate被禁止(因为provate方法也不能被继承呀)

    接口

    由于一个类只能实现一个抽象方法,故出现了接口,一个类可以实现多个接口

    接口的创建

    Java8之前和之后的接口有些许变化。

    共性
    • 接口的默认权限是public,且只能是public
    • 接口不允许存在对象属性,可以有静态属性。在声明时就初始化好的变量默认是 static & final 的。字段必须被初始化,可以使用非常量表达式初始化
    • 接口也能继承父接口,且和类继承不一样的是,一个接口可以继承多个接口
    Java8之前
    public interface PureInterface {
        int value = 1; // 必须被初始化,否则编译错误
        int m1(); 
        void m2();
        double m3();
    }
    
    • 接口只允许抽象方法
    • 接口中的方法不能有具体实现,都是抽象方法
    Java8之后
    • 提供了默认方法:使用default修饰,为接口方法的实现提供了默认实现

      public interface DefaultInterface {
          default void defaultFunc() {
              System.out.println("默认方法");
          }
      }
      
    • 支持接口中的静态方法

    实现多个接口

    • 多个接口中有相同的方法名和相同的参数列表,会编译报错。不过可以Override这个方法,重写之后新方法覆盖了接口。
    • 不同接口中有相同的方法名和不同的参数列表(重载),可以使用(Java8新特性)

    相关文章

      网友评论

          本文标题:OnJava8笔记4 -- 抽象类和接口

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