interface和abstract类的异同

阅读更多
1、jdk 1.8 之后,interface中的方法可以有方法体
  
public interface InterfaceTest {

    [color=red]public static void method(){
        System.out.println("this is interface test ......");
    }

    public default void methodOne(){ //该方法可以在实现类中从写
        System.out.println("this is interface test");
    }[/color]

    public void methodTwo();
}
   


interface和abstract相同点:

   1、都不能被实例化
不同点:

 
类型 abstract class interface
定义 abstract  class u关键字 interface关键字
继承 抽象类可以继承一个类和实现多个接口 接口可以继承接口,子类可以实现多个接口
访问修饰符 抽象方法可以有public、protected和default 接口方法默认修饰符是public,其他修饰符不可以使用
方法实现 可定义构造方法、抽象方法和具体方法 接口类没有构造方法,jdk1.8之后方法可以有方法体
实现方式 子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
作用 方法复用 可以降低程序模块之间的耦合


示例:

  abstract类:

 
 public abstract class AbstractedClass {
    protected String getStringStr() {
        System.out.println("this is a abstract class method");
        return "";
    }

    public AbstractedClass (){
        System.out.println("this is a abstract construct");
    }

    public abstract String testAbstract();
}


  interface类:

 
 public interface InterfaceTest {

    public static void method(){
        System.out.println("this is interface test ......");
    }

    default void methodOne(){
        System.out.println("this is interface test");
    }

    void methodTwo();
}


实现类:

 public class InterfaceExtend extends AbstractedClass implements InterfaceTest {

    @Override
    public void methodTwo() {

    }

    public static void main(String [] args){
        InterfaceExtend interfaceExtend = new InterfaceExtend();
        interfaceExtend.methodOne();
        InterfaceTest.method();
        interfaceExtend.testAbstract();
        interfaceExtend.getStringStr();
        AbstractedClass abstractedClass = new InterfaceExtend();//上转型
        abstractedClass.getStringStr();
    }

    @Override
    public String testAbstract() {
        return null;
    }
}

你可能感兴趣的:(java)