Java—面向对象(高)——接口

一、基本介绍

        接口就是给出一些还没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来

语法:

interface 接口名{

        //属性

        //抽象方法(1.抽象方法  2.默认实现方法  3.静态方法)

}

class 类名 implements 接口{

        //自己的属性

        //自己的方法

        //必须实现的接口的抽象方法

}

  • 小结:接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体
  • 特别说明:在jdk7.0以前,接口里的所有方法都没有方法体,而在jdk8.0后接口类可以有静态方法、默认方法,也就是说接口中可以有方法的具体实现

二、注意事项和细节

        1.接口不能被实例化

        2.接口中所有的方法都是public方法,接口中抽象方法,可以不用abstract修饰

        3.一个普通类实现接口,就必须将该接口的所有方法都实现(可使用alt+enter快捷键

        4.抽象类实现接口,可以不用实现接口的方法

        5.一个类同时可以实现多个接口

        6.接口中的属性只能是final,而且是 public static final修饰符

        7.接口中属性的访问形式:接口名.属性名

        8.接口不能继承其他的类,但是可以继承多个别的接口

        9.接口的修饰符只能是public和默认,这点和类的修饰符是一样的

package com.learn.interface_;

public class InterfaceDetail01 {
    public static void main(String[] args) {
        //new IA();
    }
}

//1.接口不能被实例化
//2.接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
//3.一个普通类实现接口,就必须将该接口的所有方法都实现,可以使用alt + enter快捷键来解决
//4.抽象类实现接口时,可以不实现接口的抽象方法
interface IA {
    void say();
    void hi();
}
class Cat implements IA{  //alt + enter 快捷键实现方法

    @Override
    public void say() {

    }

    @Override
    public void hi() {

    }
}

abstract class Tiger implements IA{

}
public class InterfaceDetail02 {
    public static void main(String[] args) {
        //证明 接口中的属性只能是final,而且是 public static final修饰符
        System.out.println(IB.n1); //说明n1是static
        //IB.n1 = 30; //说明n1是final
    }
}

interface IB{
    //接口中的属性只能是final,而且是 public static final修饰符
    int n1 = 10; //等价于 public static final int n1 = 10;
    void hi();
}
interface IC{
    void say();
}
//接口不能继承其他的类,但是可以继承其他的接口
interface ID extends IB,IC{
}
//接口的修饰符只能是public和默认,这点和类的修饰符是一样的
interface IE{}



//一个类可以同时实现多个接口
class Pig implements IB,IC{

    @Override
    public void hi() {

    }

    @Override
    public void say() {

    }
}

三、实现接口 vs 继承类

  • 接口和继承解决的问题不同

        继承的价值主要在于:解决代码的复用性和可维护性

        接口的价值主要在于:设计好各种规范(方法),让其它类去实现这些方法

  • 接口比继承更加灵活

        接口比继承更加灵活,继承是满足 is-a 的关系,而接口只需满足 like-a 的关系

is - a  举例:猫是动物              like - a  举例:猫可以像小鸟一样飞

  • 接口在一定程度上可以实现代码解耦 [即:接口规范性 + 动态绑定机制]

四、接口的多态特性

        1.多态参数

           接口类型的引用可以指向实现了接口的类的对象实例

public class InterfacePolyParameter {
    public static void main(String[] args) {

        //接口的多态体现
        //接口类型的变量 if01 可以指向 实现了接口的类的对象实例
        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.多态数组

public class InterfacePolyArr {
    public static void main(String[] args) {

        //多态数组 -> 接口类型数组
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone_();
        usbs[1] = new Carmera_();
         /*
         给Usb数组中存放Phone和相机对象,Phone类还有一个特有的方法call(),
         请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone特有方法call
          */
        for(int i = 0; i < usbs.length; i++){
            usbs[i].work(); //动态绑定机制
            //和前面一样,需要进行类型的向下转型
            if(usbs[i] instanceof Phone_){ //判断它的运行类型是不是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 Carmera_ implements Usb{

    @Override
    public void work() {
        System.out.println("相机正在工作...");
    }
}

        3.接口多态传递现象

public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向实现了该接口的类的对象实例
        IG ig = new Teacher();
        //如果IG继承了IH接口,而Teacher类又实现了IG接口
        //就相当于Teacher类也实现了IH接口,这就是所谓接口多态传递现象
        IH ih = new Teacher();
    }
}

interface IH{
    void hi();
}

interface IG extends IH{

}

class Teacher implements IG{
    @Override
    public void hi() {

    }
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值