通过字节码观察接口和抽象类

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 {


}

  

 

 从图中可以看出默认进行了的抽象类的初始化

 
抽象方法只能声明,不能实现;即不能有方法体;
 
抽象方法是需要被继承实现的,所以不能是私有的,也不能是静态的;

 

 
 
 

posted @ 2021-03-10 13:38  叮叮007  阅读(172)  评论(0编辑  收藏  举报