系列文章目录
文章目录 系列文章目录 前言 一、接口 二、实现接口与继承类 三、接口的多态特性 总结
前言
接口是更加抽象的类。
一、接口
usb插槽就是现实中的接口,厂家都遵守了统一的规定包括尺寸,排线等。这样的设计在java编程中也是大量存在的。
package com. hspedu. interface_ ; public interface UsbInterface { public void start ( ) ; public void stop ( ) ;
} package com. hspedu. interface_ ; public class Camera implements UsbInterface { @Override public void start ( ) { System . out. println ( "相机开始工作..." ) ; } @Override public void stop ( ) { System . out. println ( "相机停止工作...." ) ; }
} package com. hspedu. interface_ ;
public class Phone implements UsbInterface { @Override public void start ( ) { System . out. println ( "手机开始工作..." ) ; } @Override public void stop ( ) { System . out. println ( "手机停止工作....." ) ; }
} package com. hspedu. interface_ ; public class Interface01 { public static void main ( String [ ] args) { Camera camera = new Camera ( ) ; Phone phone = new Phone ( ) ; Computer computer = new Computer ( ) ; computer. work ( phone) ; System . out. println ( "===============" ) ; computer. work ( camera) ; }
}
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。
interface 接口
{
} class 类名 implements 接口
{
}
接口本质 接口就是更加抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体【JDK7.0】 接口体现了程序设计的多态和高内聚低耦合的设计思想 【JDK8.0】后接口可以有静态方法,成员方法,也就是说接口中可以有方法的具体实现
package com. hspedu. interface_ ; public interface DBInterface { public void connect ( ) ; public void close ( ) ;
} package com. hspedu. interface_ ;
public class MysqlDB implements DBInterface { @Override public void connect ( ) { System . out. println ( "连接 mysql" ) ; } @Override public void close ( ) { System . out. println ( "关闭 mysql" ) ; }
} package com. hspedu. interface_ ;
public class OracleDB implements DBInterface { @Override public void connect ( ) { System . out. println ( "连接 oracle" ) ; } @Override public void close ( ) { System . out. println ( "关闭 oracle" ) ; }
} package com. hspedu. interface_ ; public class Interface03 { public static void main ( String [ ] args) { MysqlDB mysqlDB = new MysqlDB ( ) ; t ( mysqlDB) ; OracleDB oracleDB = new OracleDB ( ) ; t ( oracleDB) ; } public static void t ( DBInterface db) { db. connect ( ) ; db. close ( ) ; }
}
接口使用细则part1 1)接口不能被实例化 2)接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰 3)一个普通类实现接口,就必须将该接口的所有方法都实现 4)抽象类实现接口,可以不用实现接口的方法
package com. hspedu. interface_ ; public class InterfaceDetail01 { public static void main ( String [ ] args) { }
}
interface IA { void say ( ) ; void hi ( ) ;
} class Cat implements IA { @Override public void say ( ) { } @Override public void hi ( ) { }
} abstract class Tiger implements IA {
}
接口使用细则part2 5)一个类可以同时实现多个接口 6)接口中的属性,只能是final的,而且是public static final 修饰符。比如:int a = 1;实际上是public static final int a = 1;(必须初始化) 7)接口中的属性的访问形式:接口名.属性名 8)接口不能继承其他类,但可以继承多个别的接口 9)接口的修饰符 只能是public和默认,这点和类的修饰符是一样的
package com. hspedu. interface_ ; public class InterfaceDetail02 { public static void main ( String [ ] args) { System . out. println ( IB . n1) ; }
} interface IB { int n1 = 10 ; void hi ( ) ;
} interface IC { void say ( ) ;
}
interface ID extends IB , IC { }
interface IE { }
class Pig implements IB , IC { @Override public void hi ( ) { } @Override public void say ( ) { }
}
二、实现接口与继承类
实现接口和继承类的区别 当子类继承了父类,就自动的拥有父类的功能,解决代码的复用性和可维护性 如果子类需要扩展功能,可以通过实现接口的方式扩展,设计好各种规范(方法),让其它类去实现这些方法,即更加灵活 接口比继承更加灵活,继承是满足is - a的关系,而接口只需满足 like - a的关系 可以理解实现接口是对java单继承机制的一种补充,接口在一定程度上实现代码解耦,即接口规范性+动态绑定机制
package com. hspedu. interface_ ; public class ExtendsVsInterface { public static void main ( String [ ] args) { LittleMonkey wuKong = new LittleMonkey ( "悟空" ) ; wuKong. climbing ( ) ; wuKong. swimming ( ) ; wuKong. flying ( ) ; }
}
class Monkey { private String name; public Monkey ( String name) { this . name = name; } public void climbing ( ) { System . out. println ( name + " 会爬树..." ) ; } public String getName ( ) { return name; }
}
interface Fishable { void swimming ( ) ;
}
interface Birdable { void flying ( ) ;
}
class LittleMonkey extends Monkey implements Fishable , Birdable { public LittleMonkey ( String name) { super ( name) ; } @Override public void swimming ( ) { System . out. println ( getName ( ) + " 通过学习, 可以像鱼儿一样游泳..." ) ; } @Override public void flying ( ) { System . out. println ( getName ( ) + " 通过学习, 可以像鸟儿一样飞翔..." ) ; } }
三、接口的多态特性
接口的多态性 多态参数:接口引用可以指向实现了接口的类的对象 多态数组:数组引用可以指向实现了接口的类的对象 多态传递:接口继承父接口可以被接口实现并实现接口的类的引用
package com. hspedu. interface_ ; public class InterfacePolyParameter { public static void main ( String [ ] args) { IF if01 = new Monster ( ) ; if01 = new Car ( ) ; AAA a = new BBB ( ) ; a = new CCC ( ) ; }
} interface IF { }
class Monster implements IF { }
class Car implements IF { }
class AAA { }
class BBB extends AAA { }
class CCC extends AAA { }
package com. hspedu. interface_ ; public class InterfacePolyArr { public static void main ( String [ ] args) { Usb [ ] usbs = new Usb [ 2 ] ; usbs[ 0 ] = new Phone_ ( ) ; usbs[ 1 ] = new Camera_ ( ) ; for ( int i = 0 ; i < usbs. length; i++ ) { usbs[ i] . work ( ) ; if ( usbs[ i] instanceof Phone_ ) { ( ( Phone_ ) usbs[ i] ) . call ( ) ; } } }
} interface Usb { void work ( ) ;
} class Phone_ implements Usb { public void call ( ) { System . out. println ( "手机可以打电话..." ) ; } @Override public void work ( ) { System . out. println ( "手机工作中..." ) ; }
} class Camera_ implements Usb { @Override public void work ( ) { System . out. println ( "相机工作中..." ) ; }
}
ackage com. hspedu. interface_;
public class InterfacePolyPass { public static void main ( String [ ] args) { IG ig = new Teacher ( ) ; IH ih = new Teacher ( ) ; }
}
interface IH { void hi ( ) ;
}
interface IG extends IH { } class Teacher implements IG { @Override public void hi ( ) { }
}
总结
接口的使用更多是对类继承的一种补充。