Java 接口

接口

在Java 中是一个抽象类型,是抽象方法的集合,通常以interface来声明。
1.一个类通过继承接口的方法从而继承接口的抽象方法
2.接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
3.除非实现接口的类是抽象类,否则必须要实现接口中的所有方法。
4.接口无法被实例化,但是可以被实现 implements关键字
5.一个类可以在继承一个父类的同时实现多个接口 用逗号分隔即可
6.接口也可以继承,一个子接口可以同时继承多个父接口

1.接口的声明

public interface IPhone {
    /**
     * 拍照接口
     */
   // void photo();  // 两种写法都可以 实际上默认就是 带 public abstract 修饰符的
    public abstract void photo(); // 注意没有方法体

}

以下Phone的类重写(实现)了接口IPhone的方法
注意:此处接口有多少个方法,implements该接口的类就要实现多少个方法

public class Phone implements IPhone {
    /**
     * 拍照
     * 注意Override重写注解
     */
    @Override
    public void photo() {  // public为默认修饰符
        System.out.println("手机可以拍照");
    }
}

2.接口的调用

public class PhoneTest {
    public static void main(String[] args) {
        IPhone ip1 = new Phone();
        // photo()是接口的方法 具体方法实现由Phone这个类中的photo()完成
       // 所以打印结果是 手机可以拍照
       ip1.photo();
    }

}

3.如果不想实现接口中的所有抽象方法,可以将这个类设置为抽象类,最终谁来继承这个类谁就去实现这个方法
以上代码为例,IPhone为接口 类的继承关系为 SecondPhone 继承Phone类 即

public interface  IPhone {
    public abstract void photo();
}

// 注意在此处 abstract 设置Phone为抽象类 不会报错
public abstract class Phone  implements IPhone {} 

// SecondPhone继承Phone类时 若不重写IPhone接口中的方法 将报错
public class SecondPhone extends Phone  {}
SecondPhone继承Phone类时 若不重写IPhone接口中的方法 将报错.png

4.接口中可以包含的常量
1. 默认 public static final 修饰

public interface IPhone {
    // int LENGTH; // 要先初始化 否则报错
    // 以下两种定义方法均可
    // int LENGTH=20;
    public static final int LENGTH=20;
}
代码块

2.通过接口名.常量名访问

System.out.println(IPhone.LENGTH); // 测试类中打印

4.接口中的默认方法或静态方法 jdk1.8以后版本
因为作为具体实现接口的实现类必须要实现所有接口的方法,但是实际开发中可能并不需要全部实现 此时可以通过默认方法或静态方法

public interface IPhone {
    /**
     * 默认方法
     */
    default void defaultMethod() {
        System.out.println("这是一个默认方法");
    }

    /**
     * 静态方法
     */
    static void staticMethod() {
        System.out.println("这是一个静态方法");
    }
}

此时 实现类 如Phone类可以不用去实现以上两个接口,不会报错
1.访问这两个方法时,通过接口名.方法名即可或者类名.方法名
2.默认方法可以在实现类中重写,但是静态方法不可以被重写

public class PhoneTest {
    public static void main(String[] args) {
        IPhone ip1 = new Phone();
        ip1.defaultMethod();
        IPhone.staticMethod();
    }
}

你可能感兴趣的:(Java 接口)