Java面向对象基础(接口)

什么是接口

接口是多个类的公共规范,接口是一种引用数据类型,最重要的内容就是其中的抽象方法

接口是比抽象类更抽象的抽象类,规范了对子类的约束,全面专业的实现了规范和具体实现的分离

如何定义接口

public interface 接口名称{ 接口内容 }

接口中的抽象方法如何定义

步骤:

1、新建一个java文件,类型选做interface类型
2、在接口里面写抽象方法,在接口中的抽象方法,修饰符必须是固定的关键字:public abstract(这两个关键字可以选择性删除掉)
在这里插入图片描述
使用步骤:

1、接口不能直接使用,必须有一个实现类来实现该接口
格式:
public class 实现类名称 implements 接口名称
2、接口的实现类必须覆盖重写(实现)接口中所有的抽象方法
格式:
重写方法,去掉abstract关键字,加上方法体
3、创建实现类的对象,进行使用

接口中的默认方法如何定义

格式:

public default 返回值类型 方法名称(参数列表){ 方法体 }

作用:

接口中默认方法的出现,目的是解决接口升级问题,当我们接口里面写好一个或几个抽象方法后,实现类实现了该接口,功能正常实现了。当需要在接口中定义新的方法时,如果使用抽象方法,那么实现接口类必须得全部重写新的抽象方法,所以,我们为了减少代码的更改,可以使用默认方法

接口默认方法的使用

接口中的默认方法,默认被实现类继承,实现类可直接调用。
在调用实现类的时候,如果实现类中没有默认方法,会默认向上(接口中)查找。
同时,接口的默认方法,也可以被实现类覆盖重写。

接口静态方法的定义和使用

接口静态方法的定义格式:

public static 返回值类型 方法名称(参数列表){ 方法体}

调用的时候 接口名称.静态方法名();

注意:
不能通过接口实现类来调用接口中的静态方法。因为一个实现类可实现多个接口,如果直接用实现类来调用静态方法,后期可能会产生一定的冲突。

接口常量定义与使用

接口中也可以定义成员变量,但是必须使用public static final 三个关键字进行修饰,这就是接口中的“常量”

注意:

接口中的常量必须,也可以省略public static final
接口中的常量,必须进行赋值。
调用的时候,直接接口 名.变量名

继承父类实现多个接口

1、接口中没有静态代码块,也没有构造方法
2、一个类的直接父类是唯一的,但是一个类同时可以实现多个接口,实现多个接口的时候,用逗号隔开。必须实现多个接口中的抽象方法。
格式:
public class 实现类 implements 接口1,接口2

3、如果实现类所实现的接口中出现方法重名的现象,只需重写覆盖一个方法即可。
4、如果实现类没有实现所有接口的抽象方法,那么该实现类就必须是抽象类
5、如果实现类所实现的多个接口中,存在相同的默认方法,那么实现类一定要对冲突的默认方法覆盖重写
6、一个类直接父类的方法和其实现接口的方法冲突是,那么父类优先。在java中,继承优先于接口

接口的多继承关系

1、类之间属于单根继承,只能有一个直接父类
2、类和接口之间,一个类可实现多个接口
3、接口与接口之间是多继承的

格式:
public interface 接口1 entends 接口2,接口3{}

此时就是接口1继承了接口2和接口3.
一个接口继承多个接口时,如果抽象方法重复,没有关系。如果默认方法重复,则子接口必须覆盖重写

接口练习

在这里插入图片描述

//CPU接口  方法获得CPU类型
public interface Cpu {
    
    
    public abstract String getCpu();
}
//硬盘接口
public interface Hdd {
    
    
    public abstract  String getHdd();
}
//内存接口
public interface Ram {
    
    
    public abstract String getRam();
}
public class Factory implements Cpu,Hdd,Ram {
    
    
    @Override
    public String getCpu() {
    
    
        return "Inter I7";
    }
    @Override
    public String  getHdd() {
    
    
        return "金士顿 500G";
    }
    @Override
    public String getRam() {
    
    
        return "8G运存";
    }
}
public class Computer {
    
    
    //电脑具备属性
    public String ram;
    public String hdd;
    public String cpu;

    public String getRam() {
    
    
        return ram;
    }

    public void setRam(String ram) {
    
    
        this.ram = ram;
    }

    public String getHdd() {
    
    
        return hdd;
    }

    public void setHdd(String hdd) {
    
    
        this.hdd = hdd;
    }

    public String getCpu() {
    
    
        return cpu;
    }

    public void setCpu(String cpu) {
    
    
        this.cpu = cpu;
    }

    public void show(){
    
    
        System.out.println("品牌信息如下");
        System.out.println("CPu品牌"+this.cpu);
        System.out.println("硬盘信息"+this.hdd);
        System.out.println("运行内存"+this.ram);
    }
}

public class TestComputer {
    
    
    public static void main(String[] args) {
    
    
        Computer computer = new Computer();
        Factory factory = new Factory();
        computer.setCpu(factory.getCpu());
        computer.setHdd(factory.getHdd());
        computer.setRam(factory.getRam());

        computer.show();
    }
}

结果展示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yangyingjian123/article/details/113486170