【java】关键字、代码块、接口、枚举学习笔记(二)

简介: 【java】关键字、代码块、接口、枚举学习笔记

3 接口


82c1b609e6b6437db54fd5e45ceaba6b.png

88d677cf8d504090b5bdc8f63b18c4a1.png

3.1 接口的介绍

  • 接口 : 如果一个类中都是抽象方法 , 那么这个类应该是定义规则的类 , 我们应该把此类定义成接口,接口是一种引用数据类型
  • 作用 :
  • 用于定义规则
  • 程序的扩展性

3.2 接口的定义和特点

  • 定义接口的关键字使用interface
  • public interface 接口名{ … }
  • 类与接口之间的关系是实现关系 , 用关键字implements进行连接
  • public class 类名 implements 接口名 { … }
  • 接口不能实例化
  • 接口的子类我们叫做实现类
  • 要么重写接口中所有的抽象方法
  • 要么实现类是一个抽象类
  • 注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口
package com.itheima.interface_demo;
public interface Inter {
    public abstract void show();
    public abstract void method();
}
interface Inter2 {
}
package com.itheima.interface_demo;
public class InterImpl extends Object implements Inter ,Inter2{
    @Override
    public void show() {
    }
    @Override
    public void method() {
    }
}
package com.itheima.interface_demo;
/*
    1 定义接口的关键字使用interface
      public interface 接口名{ ... }
    2 类与接口的关系是实现关系 , 使用implements进行连接
      public class 类名 implements 接口名{ ... }
    3 接口不能实例化(不能创建对象)
    4 接口的子类,我们叫做实现类
        要么重写接口中所有的抽象方法
        要么这个实现类是一个抽象类
    注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口
    还可以继承一个类的同时 , 实现多个接口
 */
public class InterfaceDemo1 {
    public static void main(String[] args) {
        // 接口不能实例化(不能创建对象)
        // Inter inter = new Inter();
    }
}

3.3 接口的成员特点

  • 成员变量 : 都是常量 , 默认修饰符 public static final
  • 构造方法 : 没有构造方法
  • 成员方法 : 只能是抽象方法 , 默认修饰符public abstract
  • 关于JDK8和JDK9版本对接口增加了一些方法新特性
package com.itheima.interface_demo;
public interface Inter {
    // 是一个常量 , 默认修饰符 public static final
    public static final int num = 10;
    // 不存在构造方法
    // public Inter(){}
    public abstract void show();
    public abstract void method();
}
interface Inter2 {
}
public class InterfaceDemo1 {
    public static void main(String[] args) {
        // 接口不能实例化(不能创建对象)
        // Inter inter = new Inter();
        // 成员变量被static修饰
        System.out.println(Inter.num);
        // 是一个常量 , 只能赋值一次
        // Inter.num = 20;
    }
}

3.4 接口的案例

package com.itheima.interface_demo.interface_test;
public interface player {
    public abstract void play();
    public abstract void pause();
    public abstract void stop();
}
package com.itheima.interface_demo.interface_test;
public class MP3 implements player {
    @Override
    public void play() {
        System.out.println("MP3开始播放音乐");
    }
    @Override
    public void pause() {
        System.out.println("MP3开始暂停");
    }
    @Override
    public void stop() {
        System.out.println("MP3开始关闭音乐");
    }
}
package com.itheima.interface_demo.interface_test;
public class MP4 implements player {
    @Override
    public void play() {
        System.out.println("MP4播放音乐");
    }
    @Override
    public void pause() {
        System.out.println("MP4暂停音乐");
    }
    @Override
    public void stop() {
        System.out.println("MP4关闭音乐");
    }
}
package com.itheima.interface_demo.interface_test;
/*
   需求 :
   1  创建一个播放接口 player
   2  定义三个抽象方法 , 播放(play),暂停(pause),停止(stop)
   3  定义MP3类,MAP4类,手机类,实现接口,重写抽象方法
 */
public class PlayerTest {
    public static void main(String[] args) {
        MP3 mp3 = new MP3();
        mp3.play();
        mp3.pause();
        mp3.stop();
        System.out.println("=============");
        MP4 mp4 = new MP4();
        mp4.play();
        mp4.pause();
        mp4.stop();
    }
}

3.5 接口中成员方法的特点

DK8版本之前 : 只能是抽象方法

JDK8版本 :

默认方法

JDK8可以在接口中定义非抽象方法(带有方法体的方法) , 需要使用default进行修饰 , 其实就是默认方法

作用 : 解决接口升级的问题

格式 : public default 返回值类型 方法名(参数) { … }

注意事项

默认方法不是抽象方法 , 可以继承 , 也可以重写 , 重写需要去掉default关键字

public 可以省略 , default不能省略

如果实现类实现了多个接口 , 有相同的方法声明 , 那么实现类必须重写该方法

静态方法

JDK8可以在接口中定义静态方法 , 也是有方法体的方法

作用 : 方便调用此功能

格式 : public static 返回值类型 方法名(参数){ … }

注意事项

静态方法只能通过接口名调用 , 不能通过实现类名字和对象调用

public可以省略 , static不能省略

JDK9版本 :

私有方法

JDK9中新增私有方法

作用 : 抽取默认方法中共性内容

格式 : private 返回值类型 方法名(参数){ … }

注意 : 要想抽取静态方法中的共性内容 , 需要对私有方法加上关键字static

4 枚举


image.png

枚举 : 当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型

作用 : 更贴切 , 加见名之意

定义 : public enum 枚举名{ … }

使用 : 通过枚举类型名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL

注意 : 每个枚举项都相当于枚举的对象

案例代码

package com.itheima.enum_demo;
public enum Sex {
    // 每一个枚举项都是枚举的对象
    GIRL("女孩"), BOY("男孩"), YAO;
    // 成员变量
    private String name;
    // 空参构造方法
    private Sex() {
    }
    // 有参构造方法
    private Sex(String name) {
        this.name = name;
    }
    // 成员方法
    public String getName() {
        return name;
    }
}
class Test {
    public static void main(String[] args) {
        System.out.println(Sex.GIRL.getName());
        System.out.println(Sex.BOY.getName());
        System.out.println(Sex.YAO.getName());
    }
}

枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行反编译查看

枚举本质上就是最终类

枚举项,就是枚举类的对象,而且是静态的常量。

有私有的构造方法

静态代码块

继承了lang包下的Enum

组成部分 :

构造器,成员方法,成员变量等 , 但是定义的成分一定要在枚举项之后,而且最后一个枚举项必须要有分号结束。


相关文章
|
13天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
97 60
|
1天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
2天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
10 1
|
7天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
32 4
|
13天前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
12天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
12天前
|
Java 测试技术 API
Java零基础-接口详解
【10月更文挑战第19天】Java零基础教学篇,手把手实践教学!
16 1
|
17天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
29 2
java202303java学习笔记第二十三天-初识内部类2
java202303java学习笔记第二十三天-初识内部类2
46 0
java202303java学习笔记第二十四天-静态内部类1
java202303java学习笔记第二十四天-静态内部类1
53 0
下一篇
无影云桌面