1.接口
1.1 接口概述
接口: 特殊的抽象类,使用方式及组成部分都与抽象类类似
语法: interface
implements
注意: 在接口中只能定义公开的静态常量及公开的抽象方法
接口与抽象类的异同:
👻相同点:
-
可以编译成字节码文件
-
都不能具体化
-
都可以作为引用对象(多态)
-
都可以使用Object(祖宗类)的方法(继承)
👻不同点:
-
接口属性都是公开的静态常量
-
接口方法都是公开的抽象方法
-
接口没有构造方法,动态代码块,静态代码块
//问题:在接口中能否有非抽象方法? 在jdk1.8中提供了default修饰的非抽象方法,一般很少使用
//定义一个接口,名字为MyInterface
interface MyInterface{
//public static final: 公开的静态常量
int SEX_MAN=1; //查看反编译工具
//public abstract: 公开的抽象方法
void test();
public default void show() {
}
}
//MyImpl实现类实现了MyInterface接口,提供两种处理方式:
//1.重写接口的抽象方法 2.把自身变为抽象类
/*abstract*/ class MyImpl implements MyInterface{
@Override
public void test() {
System.out.println("重写接口的抽象方法");
}
}
public class Test1 {
public static void main(String[] args) {
//MyInterface interface1 = new MyInterface(); //不能具体化
MyInterface interface1 = new MyImpl();
interface1.getClass(); //根据继承性, 可以调用Object的方法
}
}
1.2 接口代表一种能力
接口直接引用实现多态
🎐什么是接口:
从微观上讲,接口代表着一种能力
或约定
//案例:喷火娃具备喷火能力,飞天娃具备飞天能力
//接口代表某种能力,方法的定义代码具体能力体现
interface Fireable{
//可喷火的接口
void fire(); //可喷火的能力体现
}
interface Flyable{
void fly(); //可飞天的能力体现
}
//接口可以多实现
class Person implements Fireable,Flyable{
String name;
public Person(String name) {
this.name = name;
}
@Override //因为接口的抽象方法是public权限,所以实现类重写方法的权限必须是public
public void fire() {
System.out.println(name+"正在喷火");
}
@Override
public void fly() {
System.out.println(name+"正在飞天");
}
public void eat() {
System.out.println(name+"很能吃..");
}
}
public class Test {
public static void main(String[]