Java基础——抽象类和接口

抽象类和接口

引入

在继承关系中,基类作为类生成对象,对程序来说不合理。
动物类作为基类,生成对象显然不合理
由此,我们可以设计定义基类为抽象类

此外,动物经过人类驯化,可以衍生出一些特别的技能
例如马戏团的老虎跳火圈、狗熊自行车等
这种通过训练后天获得的可以通过Java的接口实现

抽象类

abstract修饰的类是抽象类。

public abstract class Animal{
      
}

特点

  1. 抽象类不能实例化对象
  2. 抽象类中可以定义抽象方法
  3. 抽象类中可以没有抽象方法

抽象方法

abstract修饰的方法是抽象方法。

  • 抽象方法只有方法的声明,没有方法的实现,没有方法体。
  • 包含抽象方法的类必须是抽象类
public abstract class Animal{
      public abstract void eat();
}

抽象类的继承

  1. 子类继承抽象基类后,必须实现基类中的抽象方法。
  2. 或自身也定义为抽象类
    Animal抽象基类为例
public class Cat extends Animal{
      //实现抽象方法
      public void eat(){
            System.out.println("吃饭");
      }
}

//或者
public abstract class Cat extends Animal{
      //不实现抽象方法
}

接口

Java接口是一系列方法的声明
接口可以看作是一种特别的抽象类

特点

  • 包含常量,常量可以不加final修饰符
  • 常量必须初始化
  • 包含方法的声明,方法可以不加abstract修饰符
  • 不包含变量
  • 不包含方法的实现。(staticdefault修饰的方法除外)
  • 接口不能继承类
  • 接口不能实例化
interface Train{
      void kneading();
}

使用

接口和继承类似,直接在类声明后添加implements即可。

public class Cat implements Train{
      public void kneading(){
            System.out.println("踩奶");
      }
}

与继承extends不同,接口有不一样的特性:

  • 一个类可以实现多个接口
  • 一个接口可以被多个无关类实现
  • 一个类实现接口,必须实现接口所以的抽象方法||定义为抽象类

接口的继承

Java接口的继承是多继承机制,一个接口可以同时继承多个接口
Java接口继承父接口后,自动继承父接口的所以方法和属性。

interface Train extends Practice,Drill...{
      //接口代码
}

意义

  • 补足Java类单继承的缺点
  • 接口的抽象方法,可以在不同类中被实现

JDK8接口

随着技术更新,接口也有新的规则。

  1. 允许定义static方法

  2. 允许定义default方法

interface JDK8{
      static void method(){
            System.out.println("接口静态方法");
      }

      //在重写中,不能再加default修饰符
      default void method(){
            System.out.println("接口默认方法");
      }
}

因为默认方法不是抽象方法,所以可以不重写


博客相关java项目:查看Github项目
对应github项目:Abstract、Interface
导入项目的方法: Java基础——Java如何导入本地项目

posted @ 2020-07-28 01:42  不爱学习的小策  阅读(135)  评论(1编辑  收藏  举报