接口和抽象类

252 阅读1分钟

1.接口

  • 接口中可以含有变量和方法

  • 接口中定义变量默认是public static final公共静态常量类型

  • 接口中的方法不能有方法体并且方法默认会加public abstract

  • 接口中支持默认方法default修饰

public interface AnimalsInterface {


    //允许的情况
    String a = "10";       //默认加上public static final,并且需要初始化,为什么是常量呢?因为接口是所有实现类的共性,那么要保持这种共性,就必须让继承之后的变量一致

    String eat();    //默认是加上public abstract

   
    default String shout()
    {
        return "大叫";
    }


    //不允许的情况
    //    protected String shout();   // protected修饰

    //    private String shout();   //私有修饰

    //    public void shout()       //包含方法体
    //    {
    //
    //    }
}
  • 一个实现类可以实现多个接口,使用关键字implements
public class Dog implements AnimalsInterface, PeopleInteface {

    public String eat() {
        return a;
    }

    public String say() {
        return "Dog说你好";
    }
}
  • 接口中不能含有静态方法和静态代码块。
//    static {
//        System.out.println("static");
//    }

2.抽象类

  • 抽象类中含有变量和方法。

  • 变量默认是private,可以加修饰符 public 和 protected。

  • private变量和abstract不能共用。

  • 含有抽象方法的一定是抽象类,抽象类不一定含有抽象方法。

  • 抽象方法中可以含有普通方法,不能含有默认方法。

  • 抽象类只能被继承一个,使用extends。

public abstract class AnimalAbstract {

    //允许的情况
    int a;   // 默认private

    protected  int b;

    public abstract int methodC();   //必须用abstract关键字修饰

    public void methodD()
    {
        System.out.println("methodD");
    }

    //不允许的情况
    //    public abstract int methodA()
    //    {
    //        //含有方法体
    //    }

    //    default int methodB()
    //    {
    //
    //    }
}
  • 允许含有静态方法和静态代码块。
static {
    System.out.println("static");
}

static String methodE()
{
    return "static";
}