当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式表示:那就是接口-----interface。
interface Demo{
void show1(); //接口中方法会自动用public abstract修饰
void show2();
}
对于接口中常见的成员:而且这些成员都有固定的修饰符
接口中可以定义常量,不能定义变量。接口中的属性都会自动用Public static final 修饰
例如: public static final int PI=3.14;
int PI=3.14//在接口中,与上一个定义语句效果完全相同
int PI; //这是错误的,在接口中必须指定初始值。
接口和抽象类一样,接口也不能实例化,注意:接口不能有构造方法(抽象方法中不能有方法体)
接口(具体)是实现多态(抽象)的一种方式
类与类时继承关系。类与接口是实现关系(implements)
java中不允许一个子类有多个父类,不允许多继承。但是,interface接口的作用就是解决了多继承的问题
接口的出现时避免了单继承的局限性
一个类可以实现多个接口
比如: class Demo implements A,Z{} //这里省略了A和Z接口的定义
一个类在继承另一个类的同时,还可以实现多个接口
比如: class Demo extends Q implements A,Z{} //省略了类与类之间的继承关系以及A和Z接口的定义
接口与接口之间是继承关系,而且接口可以多继承。
package com.dt64.java;
public abstract class Door {
public abstract void open();//开门
public abstract void close();//关门
}
package com.dt64.java;
public class Fdm extends Door implements Lock{
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("打开防盗门。。。。。。");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("关闭防盗门。。。。。。");
}
@Override
public void up() {
// TODO Auto-generated method stub
System.out.println("防盗门上锁。。。。。。");
}
@Override
public void down() {
// TODO Auto-generated method stub
System.out.println("防盗门开锁。。。。。。");
}
}
package com.dt64.java;
public interface Lock {
public abstract void up();//开锁
public abstract void down();//上锁
//public void say();//默认的情况 public abstract
//void play();
}
package com.dt64.java;
public class Test {
/**
* 测试 : 接口
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//Lock lock=new Lock(); 接口不能实例化
Lock lock=new Fdm();
lock.up();
lock.down();
Door dr=new Fdm();
dr.open();
dr.close();
}
}
总结:1.接口是对外暴露的规则 2.接口是程序的功能扩展 3.接口的出现降低耦合性
面向接口编程:
接口与抽象类的区别:
相同点:1.代表系统的抽象层 2.都不能被实例化 3.都能包含抽象方法
不同点:1.在抽象类中可以为部分方法提供默认实现(抽象类中可以有普通方法),而接口只能包含抽象方法(不能有方法体)。
2.抽象类便于复用,接口便于代码维护
3.一个类只能继承一个直接的父类,但可以实现多个接口。