接口中定义静态方法和默认方法
Java8之前,接口里的方法要求全部是抽象方法
Java8(含8)之后,以后允许在接口里定义默认方法和类方法
1、默认方法
Java8及上版本允许给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做默认方法(也称作扩展方法)
默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。作为替代方式,接口可提供默认方法的实现,所有这个接口的实现类都会通过继承来得到这个方法。
package cn.test.Interface;
public interface A {
default void moren(){
System.out.println("我是接口A中的默认方法");
}
}
class Test_A implements A{
public void moren(){
System.out.println("Test_A");
}
}
package cn.test.Interface;
public class Test1 {
public static void main(String[] args) {
A a = new Test_A();
a.moren();
}
}
2、静态方法
Java8以后,我们可以在接口中直接定义静态方法的实现,这个静态方法直接从属于接口(接口也是类,一种特殊的类)可以通过接口名调用。
若子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接属于子类,可以通过子类名直接调用。`
package cn.test.Interface;
public class Test2 {
public static void main(String[]args){
X.staticMethod();
Y.staticMethod();
}
}
interface X{
public static void staticMethod(){
System.out.println("X.staticMethod");
}
}
class Y implements X{
public static void staticMethod(){
System.out.println("Y.staticMethod");
}
}
3、静态方法和默认方法
本接口的默认方法中可以调用静态方法(反之不行)。
/*
* 测试静态方法和默认方法
*/
package cn.test.Interface;
public class Test3 {
public static void main(String[]args){
M m = new H();
m.K();
}
}
interface M{
public static void W(){ //静态方法
System.out.println("M.W");
}
public default void K(){ //默认方法
System.out.println("M.K");
}
}
class H implements M{
public static void W(){
System.out.println("M.w");
}
}
接口的多继承:
接口完全支持多继承和类的多继承类似,子接口扩展到某个父接口,降火的父接口中所定义的一切。
/*
* 接口的多继承
*/
package cn.test.Interface;
public interface B {
void testb();
}
interface C {
void testc();
}
interface D extends B,C{ /*接口可以多继承:接口D集成接口B,C*/
void testd();
}
package cn.test.Interface;
public class Exe implements D{
public void testb(){
}
public void testc(){
}
public void testd(){
}
}
面向接口编程:
1》面向接口编程是面向对象变成的一部分
2》接口就是规范,就是项目中最稳定的核心!面向接口编程可以让我们把握住正正和性的东西,使实现复杂多变的需求成为可能
3》通过面向接口编程,而不是面向实现类编程,可以大大降低程序模块之间的耦合性,提高整个系统的可扩展性和可维护性
4》面向接口编程的概念,比接口本身的概念要懂得多。设计阶段相对比较困难,在你未写实现时就要想好接口,接口一遍就乱套了,所以设计要比实现难。`
本节重点:
1、抽象方法是:使用abstract修饰的方法,没有方法体,只有声明定义。是一种“规范”,就是告诉子类必须要给抽象方法提供具体的方法。
2、包含抽象方法的类一定是抽象类。
3、抽象方法可以包含:属性、方法、构造方法。但是,我们不能通过抽象类创建对象。
4、接口定义规范,抽象类又有规范又有实现,普通类定义实现。
5、JDK8以后,接口不只可以定义:常量、抽象方法,还能定义默认方法,静态方法。
6、接口中,默认方法和抽象方法区别在于:抽象方法必须被实现,默认方法不是。作为替代方式,接口可提供默认方法的实现,所以这个接口的实现类都会通过继承得到这个方法
7、接口中,默认方法和静态方法的区别在于:本接口的默认方法中可以调用静态方法(反之不行)
8、JAVA中,类是单继承,接口是多继承。