JAVA笔记12-接口interface

1、概念:接口是抽象方法和常量值得定义的集合。本质上,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现

  接口定义举例:

2、接口特性:

(1)接口可以多重实现;(接口可以继承接口,类可以实现接口,类可以继承类)

(2)接口中声明的属性(成员变量)默认是public static final的,也只能是public static final的;

  这是为了修正C++中多继承容易出现问题(重复的成员变量)。

(3)接口中只能定义抽象方法,而且这些方法默认是public的,也只能是public的;

  接口中的方法不用加abstruct,默认就是抽象方法,而且只能是抽象方法。

(4)接口可以继承其他的接口,并添加新的属性和抽象方法。

3、 (1)多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口;

  (2)与继承关系类似,接口与实现类之间存在多态性

4、定义Java类的语法格式:

5、补充:实现Comparable接口(该接口只有一个compareTo方法),重写compareTo方法。写一个排序方法,能够比较所有类型的对象。

6、接口举例

例1:

public class TestInterface{
    public static void main(String args[]){
        Singer s1=new Student("le");//此处并非实例化接口,接口与抽象类一样是不可以实例化的
        s1.sing();//student is singing
        s1.sleep();//student is sleeping
        Singer s2=new Teacher("steven");
        s2.sing();//teacher is singing
        s2.sleep();//teacher is sleeping
        Painter p1=(Painter) s2;
        p1.paint();//teacher is painting
        p1.eat();//teacher is eating
    }
}
interface Singer{
    public void sing();
    public void sleep();
}

interface Painter{
    public void paint();
    public void eat();
}

class Student implements Singer{
    private String name;
    Student(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void study(){
        System.out.println("studying");
    }
    public void sing(){
        System.out.println("student is singing");
    }
    public void sleep(){
        System.out.println("student is sleeping");
    }
}
class Teacher implements Singer,Painter{
    private String name;
    Teacher(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void teach(){
        System.out.println("teaching");
    }
    public void sing(){
        System.out.println("teacher is singing");
    }
    public void sleep(){
        System.out.println("teacher is sleeping");
    }
    public void paint(){
        System.out.println("teacher is painting");
    }
    public void eat(){
        System.out.println("teacher is eating");
    }
}

 内存分析:对象中的“指向方法的指针”可以动态地根据指向该对象的引用类型调整所指向的方法

 例2:

 

原文地址:https://www.cnblogs.com/seven7seven/p/3657332.html