目录
2.接口在一定程度上实现代码解耦【即:接口规范性+动态绑定机制】
一.接口和继承解决的问题不同
继承的价值主要在于:解决代码的复用性和可维护性。
接口的价值主要在于:设计、设计好各种规范(方法),让其他类去实现这些方法
二、接口比继承更加灵活
继承是满足is - a 的关系,而接口只需满足like-a关系
1.代码如下
代码如下(示例):
package com.java.interface_;
public class ExtendVSInterface {
public static void main(String[] args) {
LittleMonkey wukong = new LittleMonkey("悟空");
wukong.climbing();
wukong.swinmming();
wukong.fly();
}
}
//接口
interface Fishable{
void swinmming();
}
interface Bird{
void fly();
}
//猴子
class Monkey{
private String name;
public Monkey(String name) {
this.name = name;
}
public void climbing(){
System.out.println(name+"猴子会爬树...");
}
public String getName(){
return name;
}
}
//继承
//小结:当子类继承了,就自动的拥有父类的功能
// 如果子类需要扩展功能,可以通过实现接口的方式扩展
// 可以理解 实现接口 是 对java单继承机制的一种补充
class LittleMonkey extends Monkey implements Fishable,Bird{
public LittleMonkey(String name) {
super(name);
}
@Override
public void swinmming() {
System.out.println(getName()+" 通过学习会游泳");
}
@Override
public void fly() {
System.out.println(getName()+"通过学习学会飞翔");
}
}
2.接口在一定程度上实现代码解耦【即:接口规范性+动态绑定机制】
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
3.接口的多态性
1.多态参数(前面案例体现)interfacePolyParameter
在前面的usb接口案例,Usb usb,既可以接受手机对象,又可以接受相机对象,就体现了接口多态(接口引用可以指向实现了接口类的对)
package com.java.interface_;
public class InterfacePolyParameter {
public static void main(String[] args) {
//接口的多态体现
//接口类型的变量if01可以指向 实现了IF接口的对象实例
IF if01=new Monster();
if01 =new Car();
//继承体现多态
//父类类型的变量a 可以指向 继承了AAA的子类的对象实例
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{ }
2.多态数组interfacePolyArr
演示一个案例给:USB数组中Phone和相机对象。Phone内还有一个特别的方法或请遍历USB数组,如果是Phone对象,除了调用USB接口定义的方法外,还需要调用phone特有方法call
package com.java.interface_;
public class InterfacePolyArr {
public static void main(String[] args) {
//多态数组->接口数组
Usb[] usbs=new Usb[2];
usbs[1]=new Camer_();
usbs[0]=new Phone_();
//遍历
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 Camer_ implements Usb{
@Override
public void work() {
System.out.println("相机工作中....");
}
}
4.多态的传递性
package com.java.interface_;
//多态传递现象
public class InterfacePolyPass {
public static void main(String[] args) {
//接口类型的变量可以指向,实现了该接口的类的对象实例化
IG ig=new Teachar();
//如果IG继承了IH接口,而TeachAR类实现了IG接口
//那么,实际上就相当于Teachar类也实现了IH接口
IH ih=new Teachar();
}
}
interface IH{
void hi();
}
interface IG extends IH{ }
class Teachar implements IG{
@Override
public void hi() {
}
}