interface接口的使用简述(一)
1、接口使用interface关键字描述定义
2、Java中,接口和类是并列的结构
3、如何定义接口:定义接口中的成员
3.1 JDK7及以前:只能定义全局常量和抽象方法
》全局常量:public static final的,但是书写时可以省略;
》抽象方法:public abstract的
3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。
4、接口中不能定义构造器:意味着接口不可以实例化
5、java开发中,通过类来实现(implements)接口使用:如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化;如果没有覆盖所有抽象方法,则此实现类仍为一个抽象类
6、java类可以实现多个接口 ----多实现弥补了java单继承性的局限性,格式:class A extends B implements C,D,E
7、接口与接口之间可以继承,并且可以多继承
8、接口具体的使用,体现多态性:见示例代码
9、接口,实际上可以看作是一种规范
补充-面试题:抽象类与接口有哪些异同?
//面试题1:当子类继承了同名的父类成员和接口成员时,如何区分使用 interface A{ int x=0; } class B{ int x =1; } class C extends B implements A{ public void pX() { // System.out.println(x);//编译不通过,提示错误,x模糊 System.out.println(super.x);//1 System.out.println(A.x);//0 } public static void main(String[] args) { new C().pX(); } } //面试题2 interface Playable{ void play(); } interface Bounceable{ void play(); } interface Rollable extends Playable,Bounceable{ Ball ball = new Ball("pingpang"); } class Ball implements Rollable{ private String name; public String getName() { return this.name; } public Ball(String name){ this.name = name; } public void play() {//重写了两个父接口中的play方法 // ball = new Ball("football"); 接口中定义了全局常量ball,不可以更改。 // System.out.println(ball.getName()); } }
public class InterfaceTest1 { public static void main(String[] args) { System.out.println(Flyable.MAX_SPEED); System.out.println(Flyable.MIN_SPEED); Plane p1 = new Plane(); p1.fly(); System.out.println(Plane.MAX_SPEED); } } interface Attackable{ void attack(); }
interface Flyable{ //全局常量 public static final int MAX_SPEED = 7900;//第一宇宙速度 int MIN_SPEED=1;//省略了public static final //抽象方法 public abstract void fly(); void stop();//省略了public abstract } class Plane extends Object implements Flyable{
@Override public void fly() { System.out.println("通过引擎起飞"); } @Override public void stop() { System.out.println("通过驾驶员停止"); } } // 抽象类实现接口 abstract class Kite implements Flyable{ @Override public void fly() { } } //类Bullet实现多个接口 class Bullet implements Flyable,Attackable,CC{ @Override public void attack() { } @Override public void fly() { } @Override public void stop() { } @Override public void method1() { } @Override public void method2() { } } interface AA{ void method1(); } interface BB{ void method2(); } //接口可以继承,并可以继承多个 interface CC extends AA,BB{
}