接口
接口定义
具体的定义我就不百度了
接口是由interface修饰定义,与类不在一个体系。同样的接口不能实例化,接口中的方法只能是抽象方法(1.8以后允许在接口中写静态方法与default方法).
实现接口通过implements关键字,实现一个接口必须实现它的所有抽象方法。
具体定义一个接口和他的实现类
public interface GrandFather {
public static void speak() {
System.out.println("我是grandfather!");
}
public default void show() {
System.out.println("我是族谱起始");
}
public void fly();
}
public class Father implements GrandFather{
private int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public void test() {
System.out.println("father 阶段!");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("father can fly"+this.i);
}
}
public class Son extends Father{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("son can fly!"+this.getI());
}
public static void main(String[] args) {
Son s = new Son();
s.show();
System.out.println(s.getI());
GrandFather s2 = new Son();
s2.show();
s2.fly();
Father s3 = new Son();
s3.test();
GrandFather.speak();
}
}
结果:
接口中静态方法它的实现类不能继承调用,只能由接口本生通过接口名调用。
接口如果要定义字段,那么该字段必须是静态且为常量。可以被接口自身及其后代调用。
接口中的default可以被后代调用
接口操作的特殊性
接口可以继承接口
//父接口
public interface A {
public void a();
}
//子接口
public interface B extends A {
public void b();
}
实现类要实现所有的方法:
public class BB implements B {
@Override
public void a() {
}
@Override
public void b() {
}
}
接口可以多继承(java中唯一)
public interface D extends A,A2{
public void d();
}
实现时所有的方法都要实现:
public class DD implements D {
@Override
public void a() {
}
@Override
public void a2() {
}
@Override
public void d() {
}
}
类可以在继承父类的基础上再实现其他接口(多实现)
public class CC extends DD implements A,A2 {
}
CC实现了A,A2接口,但却没有实现A,A2中的抽象方法原因是:
DD父类已经实现了接口A,A2中的抽象方法等同于CC也已经实现了。
抽象类与接口的区别
相同点
-
都含有抽象方法
-
都可以继承/派生,且实现类必须实现抽象方法
-
自身都不能直接实例化
-
功能: 都是作为实现(子类)和使用方的联系纽带 多态
不同点
- 实现的方式不同(接口通过实现implements关键字 / 抽象类通过extends关键字)
- 声明的内容 接口中只能包含抽象方法(1.8后增加了静态方法和默认方法), 抽象类可以包含类能包含的所有内容(常量用的不是太多)
- 接口没有构造方法
- 访问权限 , 抽象类中可以用4种 接口只能是public(默认)
- 抽象类之间可以继承但是只能是单继承; 接口之间可以产生多继承关系(java唯一一种多继承)
学习,是为了成为更好的自己!