接口
在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();
}
}
网友评论