初学者容易把继承接口和实现接口搞混,专门整理一下,顺便简单介绍一下interface、implements关键字。
继承接口和实现接口的区别、接口的特点
- 继承接口是说的只有接口才可以继承接口,是接口与接口间的。实现接口是说的接口与类之间,类不可以继承接口,但类可以实现接口。
- 一个接口可以继承一个或多个接口。 接口继承接口可以不实现父接口中的方法,可以声明自己的新方法
public interface InterfaceA extends InterfaceB,InterfaceC{}
- 一个实现类可以实现一个或者多个接口。 类实现接口时,一定要实现接口中声明的方法,如果接口中没有定义抽象方法则不需要,但是要注意,类实现了一个接口A,如果B是A的父接口,且B中有抽象方法,则该类必须实现A和B中的所有抽象方法。
public class InterfaceImpl implements InterfaceA,InterfaceB{}
- 一个子类可以继承一个父类的同时实现一个或者多个接口(一个类只能继承一个类,不能继承多个类)
public class Zi extends Fu implements InterfaceA,InterfaceB{}
- 抽象方法只能定义在抽象类中,抽象类实现接口,可以不实现接口中的抽象方法。
接口和抽象类的区别
相同点
- 都位于继承体系的顶端,用于被其他类实现或者继承
- 都不能new
- 都包含抽象方法,其子类或者实现类都必须重写这些抽象方法
不同点
- 抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等
- 接口:成员单一,一般抽取接口,抽取的都是方法,视为功能的大集合
- 类不能多继承,但是接口可以多继承
下面来详细介绍下接口及其中的关键字
接口
接口是一个引用数据类型,是一种标准规则,用关键字interface
来实现。
interface
下面是定义接口
public interface 接口名{ }
implements
implements是类用来实现接口的关键字
使用:
- 实现类实现接口
- 重写接口中的抽象方法
- 创建实现类对象(接口不能直接new对象)
- 调用重写的方法
public interface Animal{public abstract void eat();
}
public class Tiger implements Animal{@Overridepublic void eat() {System.out.println("老虎吃东西");}
}
接口中定义的成员
一、成员变量
final代表最终的,被它修饰的变量,不能二次赋值,可以视为常量
public static final 数据类型 变量名 = 值
特点
1、不写public static final 默认也有
2、接口名直接调用
3、被static final修饰的成员变量需要手动赋值
4、习惯上我们会将static final修饰的成员变量名大写
public interface Animal{public static final int NUM1 = 666;int NUM2 = 666;//不写public static final 默认也有
}
public class Test {public static void main(String[] args) {System.out.println(Animal.NUM1);}
}
二、抽象方法
格式:
public abstract 返回值类型 方法名(形参);
使用:
- 定义实现类,实现接口
public interface Animal{public abstract void eat();String drink(); //不写public abstract 默认也有
}
- 重写抽象方法
public class Tiger implements Animal{@Overridepublic void eat() {System.out.println("老虎吃东西");}@Overridepublic String close() {return "老虎喝水";}
}
- 创建实现类对象,调用重写的方法
public class Test01 {public static void main(String[] args) {Mouse tiger= new Tiger();tiger.eat();String result = tiger.drink();System.out.println("result = " + result);}
}
三、默认方法
格式:
public default 返回值类型 方法名(形参){方法体return 结果}
使用:
- 定义实现类,实现接口
public interface Animal {//默认方法public default void methodDef(){System.out.println("我是默认方法");}
}
- 默认方法重写,可以不重写
public class Tiger implements Animal{@Overridepublic void methodDef(){System.out.println("我是默认方法");}
}
- 创建实现类对象,调用默认方法
public class Test {public static void main(String[] args) {Mouse tiger = new Tiger();tiger.methodDef();}
}
四、静态方法
格式:
public static 返回值类型 方法名(形参){方法体return 结果
}
使用:接口名直接调用
public interface Animal {//静态方法public static void methodStatic(){System.out.println("我是静态方法");}
}
public class Test {public static void main(String[] args) {Animal.methodStatic();}
}
默认方法和静态方法可以作为临时加的一个小功能来使用。