#定义:一个抽象类中都是抽象方法,则可以将该抽象类定义成接口。
#接口中的抽象方法必须通过一个类来实现 implements 接口 实现类即一个实现了接口中抽象方法的类,因为Whale类实现了接口中抽象方法,所以Whale类即是实现类。
如:// Mammal mammal = new Whale();
// mammal.move();
#如果一个类没有实现接口中的所有抽象方法,则该类必须为抽象类。
#接口中没有默认构造方法,而且也不能定义构造方法。
#接口一般以I开头。
#接口中的变量为public static final常量
也就是说在接口中定义一个变量赋予值,在实现类中可以通过引用接口类名调用此常量。
public interface IMother {
default void move() {
System.out.println("evom");
}
String a="wo";
}
System.out.println(IMother.a);
#接口中的抽象方法默认public abstract。
###
1、在JDK8及其以后版本的JDK中,接口内可以定义静态方法(static修饰的方法)与默认方法(default关键字修饰的方法)
以上讲过接口中全是抽象方法,但要是想有普通方法可以在方法前加static,default,但这只适用于JDK8及以后的版本。
而且接口中的静态方法,实现类无法继承,可接口中的default类可以继承。
是错的但,
对。
public interface IMother {
default void move() {
System.out.println("evom");
}
String a="wo";
}
public interface IMother {
static void move() {
System.out.println("evom");
}
String a="wo";
}
2、继承:Java类只有单继承;但是Java中接口可以多继承 Java中只存在单继承 子接口可以实现父接口中的某些抽象方法错
即class修饰的类名只能有一个继承方,可interface修饰的接口名可以继承多个,但接口本质是抽象类是不能实现的。
3,含有抽象方法的抽象类必须至少有一个子类完全实现了其抽象方法 √ ,含有抽象方法的抽象类一定至少会有一个非抽象类
子接口可以实现父接口中的某些抽象方法错。
4、接口重复抽象方法,实现类实现一个;接口中重复常量名,实现类必须指定到底调用哪个接口中的常量.
不然会出现:
但可以指明一个如:System.out.println(IMother.a);
5、public protected friendly private 只有public 和默认的能修饰类和接口。
6、一个类可以实现一个或n个接口;如果一个类没有实现接口中所有的抽象方法,则该类必须为抽象类。
验证后半句:
7,如果接口内只定义一个抽象方法,则该接口称为函数式接口,如下例:
@FunctionalInterface
interface IMammal {
String NAME = "哺乳动物";
void move();
public default void eat() {
System.out.println("哺乳动物正在吃......");
}
注意: 可以使用@FunctionalInterface 注解来验证一个接口是不是函数式接口,Java8中java.lang.Runnable、java.util.Comparator<T>都是函数式接口; 函数式接口中可以定义多个常量、多个默认方法和多个静态方法,但只能定义一个抽象方法及多个java.lang.Object中的public方法,如下例:
@FunctionalInterface
interface IMammal {
void move();
boolean equals(Object obj);
}