首页 > 编程语言 >java学习日记20230325-接口

java学习日记20230325-接口

时间:2023-03-25 23:13:04浏览次数:43  
标签:implements 20230325 java void 接口 class new public

接口基本介绍

 

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

      如果一个类implements,需要将该接口的所有抽象方法都实现

      在jdk8以后可以默认实现方法,需要使用default关键字

      在jdk8以后,可以有静态方法

      在jdk7前接口里的所有方法都没有方法体,即都是抽象方法;

      在jdk8后接口可以有静态方法,默认方法(default/static public void hi(){}),也就是说接口中可以有方法的具体实现

      在接口中,抽象方法可以省略abstract关键字

interface inf{
    //属性
    //方法(抽象方法,默认方法,静态方法)
}

class 类名 implements  接口{
    //自己的属性
    //自己的方法
    //必须实现的接口的抽象方法
}

 

public interface UsbInterface {
    public void start();
    public void stop();
}
public class Phone implements UsbInterface {
    @Override
    public void start() {
        System.out.println("手机开始工作");
    }

    @Override
    public void stop() {
        System.out.println("手机停止工作");
    }
}
public class Computer {
    public void work(UsbInterface usbInterface){
        //通过接口调用方法
        usbInterface.start();
        usbInterface.stop();
    }
}
public class Interface01 {
    public static void main(String[] args) {
        Camera camera = new Camera();
        Phone phone = new Phone();
        Computer computer = new Computer();
        computer.work(camera);
        computer.work(phone);
    }
}

接口的注意事项和使用细节:

  1.接口不能被实例化;

  2.接口中所有的方法时public方法,接口中的抽象方法可以省略abstract

  3. 一个普通类实现该接口,必须实现接口所有的抽象方法

  4.抽象类去实现接口时,可以不实现所有接口抽象方法

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

  

interface IB{
    void hi();
}

interface IC{
    void say();
}

class Pig implements IB,IC{
    @Override
    public void hi() {
        
    }

    @Override
    public void say() {

    }
}

 

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

    

int a = 1;//实际上是 public static final int a = 1;

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

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

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

 

接口和继承

  
   实现接口在某种意义上,是java对单继承机制的补充;

   当子类继承了父类,就自动的拥有父类的功能;

   如果子类需要扩展功能,就可以通过实现接口的方式扩展;

   

public class ExtendsVsImplements {
    public static void main(String[] args) {
        LittleMonkey wk = new LittleMonkey("悟空");
        wk.climbing();
        wk.swimming();
    }
}

class Monkey{
    private String name;
    public void climbing(){
        System.out.println(name+"会爬树");
    }

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

class LittleMonkey extends Monkey implements Fishable{
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swimming() {
        System.out.println( super.getName()+ "通过学习可以像鱼儿一样游泳");
    }
}

interface Fishable{
    void swimming();
}

 

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

接口的价值在于设计,设计好各种规范方法,让其他类去实现这些方法,即更加灵活;

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

接口在一定程度上实现代码解耦(接口的规范性和动态绑定机制)

 

接口和多态

  

    1.多态参数:实现了接口的类的对象的实例  (方法形参是接口implement)

public class InterfacePolyParameter {
    public static void main(String[] args) {
        IF if01 =  new Moster();
        //接口类型的变量if01可以指向实现了IF接口的对象实例
        if01 = new Car();
    }
}

interface IF{}
class Moster implements IF{}

class Car implements IF{}

 

    2.多态数组:

public class InterfacePolyArr {
    public static void main(String[] args) {
        Usb[] usbs = new Usb[2];
        usbs[0]=new Phone01();
        usbs[1]=new Camera01();

        for (int i = 0; i < usbs.length; i++) {
            usbs[i].work();
            //判断运行类型是Phone01,向下转型
            if(usbs[i] instanceof Phone01){
                ((Phone01) usbs[i]).call();
            }
        }
    }
}

interface Usb{
    void work();
}

class Phone01 implements Usb{
    public void call(){
        System.out.println("手机可以打电话");
    }

    @Override
    public void work() {
        System.out.println("手机工作中");
    }
}
class Camera01 implements Usb{
    @Override
    public void work() {
        System.out.println("相机工作中");
    }
}

  3.接口存在多态传递现象

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

interface IH{}
interface IG extends IH {}
class Teacher implements IG{

}

 

标签:implements,20230325,java,void,接口,class,new,public
From: https://www.cnblogs.com/DragonJack/p/17255692.html

相关文章

  • JAVA入门基础
    JAVA入门打开CMDWin+R输入cmd.按下回车键Win+E打开我的电脑常见CMD命令盘符名称+冒号说明:盘符切换举例:E:回车,表示切换到E盘dir说明:查看当前路径下的内容......
  • 闭关java第四天
    Java方法详解什么是方法是语句的集合最好保持原子性:就是一个方法只完成一个功能,这样利于我们后期的拓展Java方法类似于其它语言的函数,是一段用来完成特定功能的代码片......
  • 接口测试定义
    网络协议基于HTTP网络协议发送请求:URL:统一资源定位符,用于定位每一个指定的接口。请求下发的格式定义:网络协议://IP:PORT/path?args1=xxxx&args2=czxczchttps默认端......
  • Java基础干货分享(三)
     在java中接触到地第一个数据结构就是数组,数组是一种定义后长度大小固定,能存储多个同种类型的数据结构。数组是具有下标的,对数组内容进行查找和修改是高效率的,因为可以根......
  • Java面向对象基础部分学习记录
    static关键字:修饰变量。该变量成为类变量,该变量一般为所有类中所有成员共享,在该类中其他方法可以直接调用使用,在其它类中可以直接通过类名调用使用。修饰方法。该方......
  • Java入门_一维数组_第三题_数组反转
    题目:数组反转要求:把数组的内容反转。如:arr{11,22,33,44,55,66}-->{66,55,44,33,22,11}。思路-1通过具体实例得,每一次都是将arr[i]和......
  • 《Java》学习随笔 1、基础语法
    1Java基础语法1.1基本概念一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对......
  • Java 泛型
    泛型1.泛型引入不能对加入到集合ArrayList中的数据类型进行约束(不安全)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响packagegeneric_;public......
  • java——spring boot集成kafka——kafka中主题topic和分区partition的概念
                                                       ......
  • java——spring boot集成kafka——查看消费组以及信息
                                                       ......