当前位置: 首页 > java >正文

包装类 抽象类 内部类 接口

一、包装类

维度内容
解释把 8 种基本类型变成真正的对象,才能放进集合、调用工具方法。
语法规则

8 个类:Byte/Short/Integer/Long/Float/Double/Character/Boolean

装箱:Integer.valueOf(10) 或自动 Integer i = 10;

拆箱:i.intValue()或自动 int x = i;

常量池:IntegerCache

缓存 -128~127

工具方法:parseInt("123")、MAX_VALUE、MIN_VALUE

必背代码int n = Integer.parseInt(args[0]);
高频考点`==` 比较的是对象地址;`equals()` 比较的是数值;`Integer.valueOf(200) != Integer.valueOf(200)` (超出缓存范围)。

二、抽象类

维度内容
解释不能 new 的“半完成模板”,子类必须补全它的抽象方法。
语法规则

关键字:`abstract class`

抽象方法:`abstract void draw();`

(无方法体)可以包含:普通方法、构造器、变量、

常量继承:子类必须实现所有抽象方法,否则子类也要声明为 `abstract`不能 `final`(自相矛盾)

必背代码

<br>abstract class Shape {

<br>    abstract double area();

<br>}

<br>class Circle extends Shape {

<br>    double r = 1;<br>    public double area()

{ return Math.PI*r*r; }

<br>}

<br>

高频考点抽象类有构造器,但只能被子类调用;抽象类 vs 接口:抽象类可保存状态,接口不能。

三、内部类

维度内容
一句话写在另一个类里面的类,逻辑上属于外部类,语法上可直接访问外部成员。
四大形态

1️⃣ 成员内部类(非 static)

2️⃣ 静态内部类(static)

3️⃣ 局部内部类(方法/代码块里)

4️⃣ 匿名内部类(一次性实现接口/抽象类)

语法规则

成员内部类:`Outer.Inner in = new Outer().new Inner();

静态内部类:`Outer.Inner in = new Outer.Inner();

访问权限:成员内部类可访问外部私有变量;静态内部类只能访问外部静态成员

必背代码

<br>class Outer {

<br>    private int x = 1;

<br>    class Inner {

void print(){ System.out.println(x);

} }<br>}<br>new Outer().new Inner().print(); // 输出 1<br>

高频考点匿名内部类常用于事件监听:`new Thread(() -> System.out.println("run")).start();`

四、接口

1.接口的概念及定义

如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接 口。 定义格式:

interface 接口名称{ 全局常量 ; 抽象方法 ; 
}

面向接口编程思想

接口是定义(规范,约束)与实现(名实分离的原则)的分离的思想。

优点:

降低程序的耦合性
易于程序的扩展
有利于程序的维护

因为接口本身都是由全局常量和抽象方法组成,所以接口中的成员定义可以简写: 1.全局常量编写时,可以省略 public static final 关键字,例如: public static final String INFO = "内容" ; 简写后:String INFO = "内容" ; 2.抽象方法编写时,可以省略 public abstract 关键字,例如: public abstract void print() ; 简写后:void print() ;

2.接口的实现 implements

接口可以多实现,格式:

class 子类 implements 父接口1,父接口2...{} 
class 子类 extends 父类 implements 父接口1,父接口2...{}

如果一个接口要想使用,必须依靠子类。 子类(如果不是抽象类的话)要实现接口中的所有抽象方法。

3.接口的继承

接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承,例如:

 interface C extends A,B{}

继承相当于扩展了接口的方法

4.default方法

在接口中,可以定义default方法。例如,把Person中的say()方法改为default方法


实现类可以不必覆写default方法。default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。

// 定义一个可唱歌的接口
public interface Singer {// 抽象方法:具体怎么唱由实现类决定void sing();// 默认方法:提供一个通用的“练习”实现// 实现类可以直接使用,也可以按需重写default void practice() {System.out.println("Singer is practicing basic scales.");}
}// 实现类:只需关心 sing(),也可选择重写 practice()
class PopSinger implements Singer {@Overridepublic void sing() {System.out.println("🎤 PopSinger sings a love song.");}
}// 测试
public class SingerDemo {public static void main(String[] args) {Singer singer = new PopSinger();singer.sing();     // 调用实现类的方法singer.practice(); // 调用接口提供的默认方法}
}

5.接口与抽象类的区别

抽象类要被子类继承,接口要被实现
接口只能声明抽象方法抽象类中可以声明抽象方法,也可以写非抽象方法
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明 静态方法)
接口不能有构造方法,但是抽象类可以有

http://www.xdnf.cn/news/18697.html

相关文章:

  • Flink Slot 不足导致任务Pending修复方案
  • VirtualBox 中安装 Ubuntu 22.04
  • 基于Java、GeoTools与PostGIS的对跖点求解研究
  • 如何快速对接印度股票市场数据API?完整开发指南
  • Solidity学习笔记
  • MATLAB实现CNN-GRU-Attention时序和空间特征结合-融合注意力机制混合神经网络模型的风速预测
  • AI Agent全栈开发流程推荐(全栈开发步骤)
  • Kubernetes v1.34 前瞻:资源管理、安全与可观测性的全面进化
  • 【和春笋一起学C++】(三十五)类的使用实例
  • 1.Spring Boot:超越配置地狱,重塑Java开发体验
  • 逆光场景识别率↑76%!陌讯多模态融合算法在手机拍照识别的落地实践​
  • centos安装jenkins
  • 校园跑腿小程序源码 | 跑腿便利店小程序 含搭建教程
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十八)
  • 目标检测数据集 第005期-基于yolo标注格式的PCB组件检测数据集(含免费分享)
  • JavaScript数据结构详解
  • 智元精灵GO1 agibot数据转换Lerobot通用格式数据脚本
  • [创业之路-567]:数字技术、数字产品、数字资产、数字货币、数字企业、数字经济、数字世界、数字人生、数字智能、数字生命
  • 大模型知识--Function Calls
  • element-plus穿梭框transfer的调整
  • 【实习总结】快速上手Git:关键命令整理
  • AI版权保护破局内容行业痛点:侵权识别效率升89%+维权周期缩至45天,区块链存证成关键
  • vue中 computed vs methods
  • unity热更新总结
  • Linux的线程概念与控制
  • CTFshow系列——命令执行web49-52
  • 基于深度学习的眼疾识别系统:从血细胞分类到病理性近视检测
  • 计算机网络:聊天室(UDP)
  • 用户和组笔记
  • 大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata