1:接口的理解:可以理解为规范,法律法规制定好后,大家去遵守
2:定义接口的关键字:interface(和class并列)
3:接口内部接口声明
{
》可以声明:
属性:必须是 static final修饰的全局常量不可修改(规范性)例如static final int MIX_SPEED=0 ,在接口中声明属性只能是全局常量,故可以省略static final修饰,直接在main函数中用接口名.调用(Flyable.MIX_SPEED)
方法:jdk8之前声明为抽象方法:public abstract
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
- 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。(void flay();)
- 接口中的方法都是公有的。
》不可声明
构造器 代码块
接口与类的关系 :实现关系
格式: class A extends superA implements B,C{}(B,C为两个不同接口,单继承,多接口)
注意:类的接口后必须重写类中所有方法,方可实例化(因为接口时abstract class),否则声明该类为抽象类( abstract class A implements B,C{})
A相较于superA为子类
A相较于B,C为实现类(重写抽象方法否则报错)故类可以实现多个接口,弥补了单继承的局限性
interface A{//相当于abstract static interface A(可以在main中A.调用属性不可方法,无方法体(抽象))
void methon1();//相当于abstract void methon1();
}
interface B{
void methon2();
}
interface C extends A,B{//C相当于子类接口,继承AB接口
}
class D implements C{
@Override
public void methon1() {
}
@Override
public void methon2() {
}//相当于两个接口,需要重写两个方法
}
接口的多态性:(如下)
public class test1{
public static void main(String[] args) {
Computer computer = new Computer();
Printer printer = new Printer();//创建接口实例对象
computer.transferdata(printer);
computer.transferdata(new Printer());//创建接口实现类匿名对象
//创建接口匿名实现类对象
USB usb1 = new USB(){//new 一个接口实现类对象,只不过他没有名字
@Override
public void start() {
System.out.println("U盘开始工作");
}
@Override
public void stop() {
System.out.println("U盘结束工作");
}//进行改写
};
//创建接口匿名实现类的匿名对象
computer.transferdata(new USB() {
@Override
public void start() {
System.out.println("扫描仪开始工作");
}
@Override
public void stop() {
System.out.println("扫描仪结束工作");
}
});
}
}
class Printer implements USB{//
@Override
public void start() {
System.out.println("打印机工作");
}
@Override
public void stop() {
System.out.println("打印结束");
}
}
class Computer{
public void transferdata(USB usb){//多态:USB usb = Printer printer
System.out.println("设备传输开始.....");
usb.start();
System.out.println("传输数据中");
usb.stop();
System.out.println("设备传输结束");
}
}
interface USB{
//可以声明一些属性
//长宽等
public abstract void start();
void stop();
}