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";
}