Java进阶——接口

目录

一、接口基本概念

1.接口的格式

2.接口的使用

3.多个接口实现

4.JDK8 接口新特性 default 和 static

5.JDK9 接口新特性 private

二、抽象类和接口的区别(重点)


一、接口基本概念

  • 约定好规范,然后按照规范来做。接口就是定义规范。

  • Java 中的接口作用和生活中类似,它提供一种约定,使实现接口的类在形

    式上保持一致。

  • 抽象类中可以有普通方法,而接口中的方法默认都是抽象的,也可以说接

    口是一个 ”特殊的 抽象类 “,接口不能被实例化,而且没有构造方法。

    1.接口的格式
    [修饰符] interface 接口名{ 
    ​
    //接口成员 
    ​
    } 
    public interface USBInterface { 
        
        public static final String NAME = "";//静态常量
        
        public [abstract] void service();//抽象方法不能有方法体
        
    }

    (1) 接口中的方法默认是抽象方法,所以可以省略 public abstract 修饰符

    (2) 接口中的变量只能是静态常量( static final ) , 所以可以省略 public static final ,静态常量在定义时就要赋值,且不可变。

    2.接口的使用

    接口使用和抽象类一样,都是通过子类。

    子类通过 implements 关键字实现接口,实现接口就必须实现(重写)接口中的抽象方法

    public class USBDisk implements USBInterface{ 
        
        @Override 
        public [acstract] void service() { 
            
            System.out.println("service()"); 
            
        } 
    }

    (1)一个类可以实现多个接口,接口之间使用 , 隔开

    (2)接口的实现类中,可以有普通方法,方法必须是public

3.多个接口实现

java 中继承是单继承,使用 extends 关键字;

但是一个接口实现类可以实现多个接口,使用 implements ,多个接口之间用 , 隔开。

public class Computer implements USBInterface, ChargeInterface{ 
    //定义一个实现类实现多个接口
​
    public void play() { // 普通方法
        
        System.out.println("play game"); 
        
}
​
    @Override 
    public void charge() { //重写抽象方法
        
        System.out.println("充电"); 
​
}
​
    @Override 
    public void service() { //重写抽象方法
​
            System.out.println("USB接口"); 
​
    } 
} 

一个类可以同时继承和实现接口, extends 要在 implements 之前

public class LenovoComputer extends Computer implements USBInterface, ChargeInterface{
​
}

接口与接口之间是继承关系,使用 extends 关键字。多个接口使用 , 隔开

public interface USBC extends USBInterface,ChargeInterface{ 
​
} 

4.接口的基础语法:

类和类之间叫做继承,用extends,类和接口之间叫做实现implement;

4.JDK8 接口新特性 default 和 static

default:在 jdk8.0 中 default 关键字可用于在接口中修饰方法(默认方法), default 修饰的方法可以有具体实现,也只能在接口中出现。 default 修饰的方法可以被重写。

默认方法可以在不破坏已经在使用该接口的所有代码。默认方法有时也称为防御方法(defender method)或 虚拟扩展方法(virtual extension method)

static:接口中还可以有 static 修饰的方法,称为静态方法(类方法)。 static 方法必须直接使用 接口名.方法名调用。

/*
* 从Java 8 开始,接口允许定义默认方法(注意是在接口)
* 格式:
* public default 返回值 方法名(){
*       方法体
* }
* 从Java 8 开始,接口允许定义静态方法。
* public static  返回值 方法名(){
 *       方法体
 * }
 * 接口名称。静态方法名(参数列表);
*/
public interface Usb {//接口
​
    //接口中的抽象方法
    public abstract void a();
    //新添加的默认方法
    public default void b(){
        System.out.println("实现接口升级");
    }
    //新添加的静态方法
    public static void c(){
        System.out.println("实现静态方法");
    }
}
public class Usbfeng implements Usb{//实现类1
    @Override
    public void a() {
        System.out.println("Usbfeng");
    }
​
​
    @Override
    public void b(){
        System.out.println("默认default覆盖写法");//重写默认b()方法完全可以,最后实例化对象调用
    }
}
public class Usbshan implements Usb{//实现类二
    @Override
    public void a() {
        System.out.println("Usbshan");
    }
}
/*
* 1.接口的默认方法,可以通过接口实现类对象,直接调用
* 2.接口的默认方法,也可以被接口实现类进行覆盖重写
* */
public class Test {//测试类
    public static void main(String[] args) {
​
        //创建了实现类对象
        Usbfeng usbfeng = new Usbfeng();
        usbfeng.a();//调用抽象方法,实现的是右侧实现类
        usbfeng.b();//调用默认方法,如果实现类中没有,会向上找接口
​
        Usbshan usbshan = new Usbshan();
        usbshan.a();
        usbshan.b();//调用mo
​
        Usb.c();
​
    }
}
5.JDK9 接口新特性 private

我们需要抽取一个共有方法,用来解决多个默认方法之间重复代码的问题,但是这个共有方法不应该让实现类使用,所以私有化

解决方案:

从Java 9开始接口当中允许定义私有方法。

1.普通私有方法,解决多个默认方法之间重复代码的问题。

private 返回值类型 方法名称(参数列表){
    方法体
}
public interface Typc {//代码重复率高
    public default void a(){
        System.out.println("默认方法A");
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
    
    public default void b(){
        System.out.println("默认方法B");
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
}

运用私有化后

public interface Typc {
    //因为被私有化,只有a和b能够使用c,其余的地方无法使用
    public default void a(){
        System.out.println("默认方法A");
        c();
    }
    public default void b(){
        System.out.println("默认方法B");
        c();
    }
    private void c(){
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
}

测试

public class Testtypec {
    public static void main(String[] args) {
        Typcc typcc = new Typcc();
        typcc.b();
        typcc.a();
    }
}

输出结果

image-20230830013527462

2.静态私有方法,解决多个静态方法之间重复代码问题

private static 返回值类型 方法名称 (参数列表){
    方法体
}
1.静态私有方法同理,只有本接口多个静态方法可以使用,其余作用域无法使用。
2。在Java9以后出现并使用

JDK9 接口中可以使用 private 修饰方法。供接口中其他方法调用。

二、抽象类和接口的区别(重点)

特性接口抽象类
组合可以在新类中组合多个接口只能继承一个抽象类
状态只含有静态字段、抽象方法、默认方法、静态方法可以包含字段
默认方法和抽象方法默认方法不需要在子类里实现,它只能引用接口中的方法抽象方法必须在子类里实现
构造器不能有构造器(接口没有构造、不能实例化)有构造、同样不能实例化
访问权限隐式 public可以为 protected 或包访问权限
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值