Java抽象类与接口

1.抽象类

  抽象类表示抽象程度比较高而无法直接通过new来创建实例的类,抽象类使用abstract修饰。抽象类可以包含普通的属性和方法,还可以包含抽象方法(当然也可以不包含)。

  抽象方法使用abstract修饰,没有方法体,方法声明结尾是分号,抽象方法的具体实现留在子类中。

public abstract class  AbstractClass
{
    private int value;

    public void method()
   {
      System.out.println(value);
   }

   public abstact void setValue();      //抽象方法
}

  子类继承抽象类后,可以实现抽象方法,也可以不实现。如果子类中包含抽象方法,则该子类也要声明为abstract类。也就是说如果子类继承自抽象类,并且子类不想再成为抽象类,则子类必须实现抽象父类中的所有抽象方法,即使某些方法子类用不上。

  父类不是一个抽象类,子类也可以添加新的抽象方法而成为抽象类。

  虽然抽象类不能直接new实例对象,但抽象类仍然可以作为类型而声明一个对象。

abstract class Parent
{
    private String name;

    public abstract void setName();
}

class Child extends Parent
{
    public void setName()
   {
      name = "Child";
   }
}

public class Test
{
     public static void main(String[] args)
     {
         Parent  parent = new Child();        // 声明一个Parent类型的变量
         parent.setName();
     }
}

  2. 接口

  接口是一种比抽象类更加抽象也更加灵活的类型,接口也不能直接new实例对象,并且接口中只能包含常量和抽象方法。

public interface  MyInterface
{
    method();
}

  和抽象类一样,虽然不能直接new接口实例对象,但接口也是可以作为类型来声明对象。

  接口中的所有属性都默认使用public final static来修饰,接口中的所有方法都默认使用public abstract来修饰,在接口中就可以省去这些修饰符。

  子类使用implements关键字表示实现某个接口,在子类中必须实现接口中的所有方法,即使某些方法用不上。

  3. 抽象类与接口的区别

  接口比抽象类更加抽象,只能包含常量和抽象方法。抽象类可以包含普通属性和普通方法;

  接口比抽象类灵活,一个类可以实现多个接口,但一个类最多只能继承自一个抽象类 ,Java中使用接口来实现多继承的功能;

  子类与抽象父类的关联性更强,是"is-a"的关系,子类与接口之间的关联性较弱,是"is-kind-of"的关系。

参考资料 《Java核心技术》

原文地址:https://www.cnblogs.com/jqctop1/p/4668828.html