java之接口

时间:2022-07-23
本文章向大家介绍java之接口,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多继承,就有了接口,就可以得到多重继承的效果。

接口是抽象方法和常量值的定义的结合;

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只含有常量和方法的定义,而没有变量和方法的实现;

实现接口类:class SubClass implements interfaceA{}

一个类可以实现多个接口,接口亦可以继承其它接口;

接口的特点:

  • 用Interface来定义;
  • 接口中的所有成员变量都默认是由public static final 修饰的;
  • 接口中的所有方法都是默认由public abstract修饰的;
  • 接口没有构造器;
  • 接口采用多层继承机制;

接口定义举例:

public interface Runner{
    int ID = 1;
    void start();
    public void run();
    void stop();
}

实现接口的类中必须提供接口中的所有方法的具体实现,方可实例化,否则需要声明为抽象类

接口的主要作用是被实现类实现;

与继承关系类似:接口和实现类中间存在多态性;

当存在继承和实现关系时,先继承后实现;

抽象类在新增抽象方法时存在问题:父类新增抽象方法,子类必须实现该抽象方法,否则子类必须声明为抽象类;

解决方法:新建一个接口,接口中为该抽象方法,让子类去实现;

举个例子:会唱歌的厨师是个好老师。

如果用抽象类来实现:老师--继承--厨师--继承--歌者--继承--人,但是老师、厨师、歌者之间并没有相应的关系;

如果用接口实现:老师--继承--人,然后老师实现厨师接口,老师实现歌者接口;

Person.java

package inf;

public abstract class Person {
    String name;
    int age;
    int sex;
    
    abstract void showInfo();
    
}

Cooking.java

package inf;

public interface Cooking {
    void fry();
}

Singing.java

package inf;

public interface Singing {
    void singing();
}

SCTeacher.java

package inf;

public class SCTeacher extends Person implements Cooking,Singing{
    String course;
    
    public void setInfo() {
        super.name = "tom";
        super.age = 12;
        super.sex = 1;
        this.course = "数学";
    }
    
    public void showInfo() {
        System.out.println("姓名:"+super.name
                +"n"+"年龄:"+super.age+"n"
                +"性别:"+super.sex);
        System.out.println("教的课程是:"+this.course);
    }
    public void fry() {
        System.out.println("老师的炒菜很好");
    }
    public void singing() {
        System.out.println("老师的唱歌很好");
    }
}

Main.java

package inf;

public class Main {
    public static void main(String[] args) {
        SCTeacher sc = new SCTeacher();
        sc.setInfo();
        sc.showInfo();
        sc.fry();
        sc.singing();
        
//        Cooking c = new SCTeacher();
//        c.fry();
    }
}

输出:

姓名:tom 年龄:12 性别:1 教的课程是:数学 老师的炒菜很好 老师的唱歌很好