接口的学习

标题

  • 1.接口-interface
  • 细节
    • 1.接口和抽象类的区别
    • 2.接口的多态
      • 2.1 接口的多态数组
      • 2.2 接口的多态传递现象

1.接口-interface

为什么有接口?
答:usb插槽就是现实中的接口。可以把手机、相机、u盘都插在usb插槽上,而不用担心哪个插槽是专门插哪个的,原因就是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规范。

细节

1.在Jdk7.0前,接口里的所有方法都没有方法体,即都是抽象方法;Jdk8.0后接口可以有静态方法、默认方法,也就是说接口中可以有方法的具体实现。

1.接口不能被实例化

public class InterfaceDetail01 {
	public static void main(String[] args) {
		//'IA' is abstract; cannot be instantiated
		//new IA();
	}
}
interface IA {}

2.接口中所有的方法都是public方法,接口中的抽象方法,可以省略abstract关键字;

  • 如何证明是public的?
	interface IA {
		//实际上是public abstract void say();
		void say();
	}
	abstract class Cat implements IA {
    @Override
    //试图去分配一个弱的访问权限
    //void say() {}
    public void say() {}
}

3.一个普通类实现接口,必须将该接口中所有的方法都实现;

interface IA {
	void say();
	void cry();
}
class Cat implements IA {
	//Class 'Cat' must either be declared abstract or implement abstract method 'cry()' in 'IA'
	@Override
	public void say() {}
	@Override
	public void cry() {}
}

4.抽象类实现接口,可以不实现接口中的方法。

interface IA {
	void say();
	void cry();
}
abstract class Tiger implements IA {}

5.一个类可以同时实现多个接口;

interface IB {void hi();}
interface IC {void cry();}
class Cat implements IB,IC {
	@Override
	public void hi() {}
	@Override
	public void cry() {}
}

6.接口中属性都是公开public的、静态static的、final修饰的;

  • 如何证明是public的?
    在不同包下具有继承关系的另一个接口的方法里可以调用n1
public class Interface02 {
    public static void main(String[] args) {
        System.out.println(IB.n1);//static
        //Cannot assign a value to final variable 'n1'
        //IB.n1 = 20;//final
    }
}
interface IA {
    int n1 = 10;//等价于public static final int n1 = 10; 
    void say();
}

7.接口可以继承多个接口,类和接口是实现,接口和接口是继承

interface IB {
    void say();
}
interface IC {
    void work();
}
interface ID extends IB,IC {//这里是extends继承
}

8.接口的修饰符只能是public或默认

interface 接口名 {
	//public static final 属性
	//方法(1.抽象方法 2.默认实现方法 3.静态方法)
}

9.接口多态传递现象

public class InterfacePolymorphicPass {
    public static void main(String[] args) {
        IG ig = new Student();
        IH ih = new Student();
    }
}
interface IH {
    void hi();
}
interface IG extends IH{}
class Student implements IG {
    @Override
    public void hi() {
        
    }
}

10.继承和接口 冲突

interface A {
    public static final int x = 0;
}
class B {
    int x = 1;
}
class C extends B implements A{
    public void pX() {
        //Reference to 'x' is ambiguous, both 'B.x' and 'A.x' match
        //System.out.println("x=" + x);
        System.out.println("访问父类的属性 " + super.x);
        System.out.println("访问接口的属性 " + A.x);
    }
}

1.接口和抽象类的区别

jdk8以后,接口中可以有static方法,默认方法,接口中的属性只能是public static final的;

2.接口的多态

接口类型的引用可以指向实现了该接口的类的对象实例

2.1 接口的多态数组

public class Interface01 {
    public static void main(String[] args) {
        //接口类型的引用可以指向实现了该接口的类的对象实例
        IB ib = new Teacher();
        //如果IB 继承了 IA接口,并且Teacher 类实现了IB接口,
        //那么就相当于Teacher 类也实现了IA接口,
        // 这就是接口的多态传递现象
        IA ia = new Teacher();
    }
}
interface IA {
    
}
interface IB extends IA {
    
}
class Teacher implements IB {
    
}

2.2 接口的多态传递现象

public class Interface01 {
    public static void main(String[] args) {
        //接口类型的引用可以指向实现了该接口的类的对象实例
        IB ib = new Teacher();
        //如果IB 继承了 IA接口,并且Teacher 类实现了IB接口,
        //那么就相当于Teacher 类也实现了IA接口,
        // 这就是接口的多态传递现象
        IA ia = new Teacher();
    }
}
interface IA {
    
}
interface IB extends IA {
    
}
class Teacher implements IB {
    
}

你可能感兴趣的:(笔记,学习,java,jvm)