interface Iwalkable{
public abstract void walk();
}
interface Iswimable{
void swim();//相当于public abstract void swim();
}
//接口的继承
interface Iampable extends Iwalkable,Iswimable{
}
class Animal{
String name;
String color;
}
//接口的实现关系有时候相当于继承关系
class Dat extends Animal implements Iswimable{
//覆盖时方法权限要比父类大
public void swim(){
System.out.println("cat---swim");
}
}
public class InterfaceClass {
public static void main(String[] args) {
Iswimable dat = new Dat();//面向接口编程
dat.swim();//多态运行时表现出的是子类的特征
}
}
步骤:定义接口--->定义接口实现类--->创建对象
1、接口定义:
interface 接口名称 { }
接口是一种特殊的抽象类,如果没有方法前加abstract,会在编译时自动添加(所以abstract可以省略)。
例如:void eat();----->public abstract void eat();
2、接口注意点:
- 接口中没有构造器,不能创建对象
- 接口中可以定义变量,都是全局静态常量(一般很少这样使用)
- 接口中定义的方法都是公共的抽象方法
- 接口中可以定义内部类,内部类也是public abstract
- 接口可以实现多继承,而普通类不可以
- 接口继承时不必覆盖父接口的方法
3、接口继承:extends
interface 接口名称 extends 继承的接口名,继承的接口名
4、接口的实现:
class 类名 implements 接口名(接口可以有多个)
在实现类中必须要覆盖接口中的方法。
5、接口与抽象的区别:
相同点:
- 都是被其他类实现或者被继承
- 都不能实例化
- 都可以定义抽象方法,定义的抽象方法子类都要被覆盖
不同点:
- 接口中没有构造器;抽象类中有
- 接口中只能有抽象方法;抽象类可以包含普通方法(带有方法体)和抽象方法
- 接口中成员变量:public static final 变量(静态常量);抽象类中,默认权限
- 接口中默认方法:public abstract 方法名;抽象类中,默认权限
6、面向接口编程:把实现类对象赋值给接口类型的变量的过程
Iswimable dat = new Dat();//面向接口编程
实现通用编程
package test;
interface IUSB{
void swapData();
}
//主板
class MouseBoard{
void PluginIn(IUSB u){
u.swapData();
}
}
//鼠标
class Mouse implements IUSB{
public void swapData(){
System.out.println("mouse");
}
}
//键盘
class KeyBoard implements IUSB{
public void swapData(){
System.out.println("print");
}
}
public class InterfaceClass {
public static void main(String[] args) {
IUSB m = new Mouse();
IUSB d = new KeyBoard();
MouseBoard b = new MouseBoard();
b.PluginIn(d);
b.PluginIn(m);
}
}