Java-接口和抽象类区别
在类的设计中,需要明确一个原则,一个类不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果接口和抽象类都可以使用,那么优先使用接口,避免继承局限
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
abstract class AA{ //定义一个抽象类AA abstract public void printAA(); //抽象类中printAA()方法 interface AAA{ //抽象类中顶一个接口为AAA public abstract void printAAA(); //接口AAA中含有一个printAAA方法 } } class BB extends AA{ //一个BB类继承抽象父类AA public void printAA(){ //覆写父类中抽象方法AAA System.out.println("hello-->AAA"); } class CC implements AAA{ //定义BB类中内部类为CC并实现接口AAA public void printAAA(){ //覆写接口AAA中printAAA方法 System.out.println("hello--->BBB"); } } } public class lcj1 { public static void main(String[] args){ AA.AAA aa=new BB().new CC(); //实例化内部接口对象 aa.printAAA(); //调用内部接口覆写接口AAA中的printAAA方法 } } //hello--->BBB
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
interface AA{ //定义一个接口AA abstract public void printAA(); //抽象类中printAA()方法 abstract class AAA{ //抽象类为AAA public abstract void printAAA(); //抽象方法为printAAA } } class BB implements AA{ //一个BB类实现接口AA public void printAA(){ //覆写父类中抽象方法AAA System.out.println("hello-->AAA"); } class CC extends AAA{ //继承接口AA中的AAA类 public void printAAA(){ //覆写接口AAA中printAAA方法 System.out.println("hello--->BBB"); } } } public class lcj1 { public static void main(String[] args){ AA.AAA aa=new BB().new CC(); //实例化内部接口对象 aa.printAAA(); } } //hello--->BBB