Java中的抽象类和接口

126 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、抽象类

  1. 当一个类中包含了抽象方法,该类必须使用abstract关键字来修饰,使用abstract关键字修饰的类为抽象类
  2. 抽象类可以不含任何抽象方法,只需使用abstract关键字修饰即可。
  3. 抽象类是不可以实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用
  4. 如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象方法实现。

案例:

//定义抽象类Animal
abstract class Animal07 {
    //定义抽象方法 shout()
    abstract void shout();
}
//定义 Dog类继承抽象类 Animal
class Dog07 extends Animal07 {
    //实现抽象方法 shout()
    void shout(){
        System.out.println("汪汪……");
    }
}
//定义测试类
class ExampleA07 {
    public static void main(String[] args) {
        Dog07 dog07=new Dog07();
        dog07.shout();
    }
}

二、接口

  1. 接口中的变量默认使用“public static final”来修饰,即全局常量
  2. 类与接口之间的实现关系

案例:

//定义了 Animal接口
interface AnimalI08 {
    int ID=1;   //定义全局常量
    void breathe(); //定义抽象方法 breathe()
    void run(); //定义抽象方法 run()
}
//Dog类实现了 Animal接口
class Dog08 implements AnimalI08 {

    @Override
    public void breathe() {
        System.out.println("狗在呼吸");
    }

    @Override
    public void run() {
        System.out.println("狗在跑");
    }
}
//定义测试类
class ExampleA08 {
    public static void main(String[] args) {
        Dog08 dog08 =new Dog08();
        dog08.breathe();
        dog08.run();
    }
}
  1. 接口之间的继承关系

案例:

//定义了 Animal接口
interface Animal09 {
    int ID=1;   //定义全局常量
    void breathe(); //定义抽象方法 breathe()
    void run(); //定义抽象方法 run()
}
//定义了 LandAnimal接口,并继承了 Animal接口
interface LandAnimal extends Animal09 { //接口继承接口
    void liveOnLand();  //定义抽象方法 liveOnLand()
}
//定义 Dog类实现 LandAnimal接口
class Dog09 implements LandAnimal {

    @Override
    public void breathe() {
        System.out.println("狗在呼吸");
    }

    @Override
    public void run() {
        System.out.println("狗在跑");
    }

    @Override
    public void liveOnLand() {
        System.out.println("狗生活在陆地上");
    }
}
//定义测试类
class ExampleA09 {
    public static void main(String[] args) {
        Dog09 dog09 = new Dog09();
        dog09.breathe();
        dog09.run();
        dog09.liveOnLand();
    }
}
  1. 接口特点:

①接口中的方法都是抽象的,不能实现实例化对象。

②当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。

③一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开。

④一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。

⑤一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。(先继承再实现)