首页 专题 文章 代码 归档
Java 面向对象-接口
2020.02.27 19:44 2020.02.27 19:46

1. 接口

再接上节,其实抽象类中,除了有没有实现的抽象方法,还可以有:有实现的方法,有各种字段:

package test05;

public abstract class Animal {

    String name = "动物";


    public abstract void shout();

    public void test() {
        System.out.println("这是抽象类中有具体实现的方法...");
    }
}

前面我们说:抽象方法实际上相当于定义了“规范”。但是这种有属性,有具体实现方法的抽象类,貌似不那么“规范”,那有没有更规范的?,有,接口。


如果一个抽象类没有字段,所有方法全部都是抽象方法,那么该类就可以从抽象类变成接口

接口用关键字interface定义:

package test05;

public interface Animal {

    public abstract void shout();

}

注意:接口名前面没有class了,是interface

所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。

因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样),所以上面代码还可以变成:

package test05;

public interface Animal {

    void shout();

}

2. 实现接口

当一个类需要实现接口时,使用implements关键字,如下Dog类:

package test05;

public class Dog implements Animal {
    @Override
    public void shout() {
        System.out.println("这是狗吠....");
    }
}

注意:当一个类实现某个方法时,就必须实现接口中的所有方法(因为接口中所有方法都没有具体实现)。

3. 接口继承

一个interface可以继承自另一个interfaceinterface继承自interface使用extends,它相当于扩展了接口的方法。例如:

package test05;

public interface Animal {

    void shout();

}

interface moreAnimal extends Animal {

    void eat();
}

因此,moreAnimal就有2个方法,其中一个来自Animal

4. default方法

在接口中,可以定义default方法。例如,把Animal接口的shout()方法改为default方法:

public interface Animal {

    default void shout() {
        System.out.println("这是动物叫...");
    }

}

public class Dog implements Animal {
// Dog 类就可以不必实现shout方法
}

Dog 类就可以不必实现shout方法,而可以直接调用:

public static void main(String[] args) {
    Dog dog = new Dog();
    dog.shout();

}

实现类可以不必覆写default方法。default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法

换句话说,我子类想重写父类的default方法就重写,我不想重写,那就默认调用父类的方法。

本节阅读完毕! (分享
二维码图片 扫描关注我们哟