通过字节码观察接口和抽象类
1.接口中有默认方法,只需要default修饰即可,可以有多个
public interface A {
default int print1(){
System.out.println("---1----");
return 0;
}
default void print2(){
System.out.println("----2-----");
};
default String print3(){
System.out.println("----3-----");
return "aaa";
};
default int print4(){
System.out.println("---4----");
return 0;
}
default void print5(){
System.out.println("----5-----");
};
default String print6(){
System.out.println("----6-----");
return "aaa";
};
}


从上面可以看出,其默认default被替换为public
2.接口中的成员变量默认都是public static final修饰的,方法是透过public abstract修饰的
public interface D {
//public static final
int c = 1;
//public abstract
void test();
}

2.接口不能继承抽象类,接口可以继承接口
3.抽象类必须实现接口
4.接口要被实现,抽象类要被继承
5.抽象类中可以有构造方法
public abstract class B implements A {
int num = 1;
private B(int num) {
this.num = num;
}
public B(int num,int sum) {
this.num = num;
this.num = sum;
}
public static void print(){
System.out.println("------------");
}
}
6.接口和抽象类不能直接实例化,实例化只能用多态体现
7.未完全实现接口的类,只能是抽象类;抽象类的子类,如果不能完全实现抽象类中的方法,只能是抽象类。
public interface D {
int c = 1;
void test();
void print();
}

抽象类可以没有抽象方法,有抽象方法的类必须是抽象类
public abstract class DImpl implements D {
}

从图中可以看出默认进行了的抽象类的初始化
抽象方法只能声明,不能实现;即不能有方法体;
抽象方法是需要被继承实现的,所以不能是私有的,也不能是静态的;

浙公网安备 33010602011771号