java接口
- 接口的定义
- 接口的实现
- 接口的继承
- java类继承父类同时实现接口
接口的定义:一些抽象方法和固定变量的集合。
其特性包括:
- 接口不能被修饰为private
- 接口中数据被声明为常量,必须赋初值,且常量只能被声明为public、static、final
- 接口中的方法只有声明,没有方法体。且只能被修饰为public与abstract
- 接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰
public interface IPractice {
public static final int x = 0; //x一定要赋值
void ShowX(); //未声明权限的方法将自动声明为public abstract
public abstract void Print(); //因此接口中的方法使用public或者abstract都是多余的
public static void ShowX(int y) { //方法可以被重载、该方法被声明为静态方法, 必须有方法体
System.out.println(y);
}
public default void Print(int y) {} //default修饰的方法为默认方法
}
//静态方法和默认方法的继承访问规则相当复杂。
接口的实现:接口通过implements关键字继承并实现
- 实现接口的类必须实现接口中声明的所有抽象方法。否则,类必须声明为abstract
- 实现接口的类方法必须被修饰为public
- 一个类可以同时实现多个接口
package test_4;
public interface IPractice_2 {
void Sum();
}
package test_4;
public class PracticeImpl implements IPractice,IPractice_2{ //可以同时继承(实现)两个接口
public void ShowX() { //任意函数没有实现就会报错,除非类声明为abstract
System.out.println("ShowX");
}
public void Print() {
System.out.println("Print");
}
public void Sum() { //实现两个接口的类如果没有实现所有函数,同样会报错
System.out.println("Sum");
}
public void Add() { //类在实现接口的同时可以拥有自己的方法
System.out.println("Add");
}
}
接口的继承:与类的继承类似,但允许多重继承。
package test_4;
public interface IPractice_sub extends IPractice, IPractice_2{ //可以多重继承,继承规则类似于类的继承
void Sub_method(); //可以添加方法
}
package test_4;
public class Practice_subImpl implements IPractice_sub{
//此时子接口相当于拥有三个接口方法的接口,所有方法必须全部实现,否则声明为abstract
public void Sub_method() {
System.out.println("Add");
}
public void ShowX() {
System.out.println("ShowX");
}
public void Print() {
System.out.println("Print");
}
public void Sum() {
System.out.println("Sum");
}
}
java类继承父类同时实现接口:
[modifer] class SubClass extends SuperClass implements SomeInterface{
Data && Method
}
如:
package test_4;
public class PracticeImpl_sub extends PracticeImpl implements IPractice{
//如果父类已经实现接口,则子类无需再重新实现接口。否则要实现接口所有方法
public void Add() { //重写父类方法
System.out.println("re_add");
}
}
总结:
接口默认被修饰为abstract,因此接口就类似于java的抽象类,但这种抽象类内部方法均为抽象方法,内部数据均为final数据,是“抽象的抽象类”。接口除了比普通的抽象类更加“纯”之外,接口也支持多继承,这在很大程度上提高了java的模块化。