Java:抽象类和接口的异同?
异:
1、抽象类中可以有私有属性、私有方法,接口中只能有常量和公开的方法。
2、抽象类之间只能单继承,接口之间可以多实现和多继承。
3、接口强调功能的实现,抽象类强调所属关系。
同:
1、子类、实现类都必须重写它们的抽象方法,或者声明自己为抽象类。
2、都不可以被实例化。
抽象类
简介:
1、类被abstract修饰,不可被实例化,其余和正常类没有区别
2、内部可以有被abstract修饰的抽象方法
3、继承此类的子类必须重写抽象方法、或声明自己是抽象类
4、重写方法时,访问修饰符和抛出异常必须大于等于父类的声明。
例子:
public abstract class Demo_02 { //自己的属性 private String name = "lurenjia"; //正常方法 public void getMyName() { System.out.println(name); } //待实现的抽象方法 abstract void add(int a,int b); }
接口
简介:
1、接口使用关键字interface定义、不可被实例化,其余和正常类没有区别
2、内部方法默认被修饰了public abstract ,属性默认被修饰了public static final
3、实现此接口的类必须重写接口中的抽象方法,或者声明自己为抽象类。
4、jdk 8 以后,支持在接口中创建默认方法和静态方法,同样默认为public,子类可以不重写默认方法。
5、接口之间可以多继承,类与接口之间可以多实现。
例子:
//同一个包下可见的接口 interface DomeInterface { //一个隐式修饰 public static final 的变量 String NAME ="lurenjia"; //一个隐式修饰public abstract 的方法 void getName(); //jdk8:支持有实现的默认方法,隐式修饰:public default void sayHi(){ System.out.println("Hi!"); } //jdk8:支持实现的静态方法,隐式修饰:pubic public static void doSome(){ System.out.println("i am doSomeThing."); } }