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

Java SE--抽象类和接口

一.抽象类概念

一个类中没有包含足够的信息描述一个对象时,就可以作为抽象类

二.抽象类的语法

1.用关键字abstract进行修饰的类就是抽象类

2.用关键字abstract进行修饰的方法就是抽象方法(可有可无),抽象方法不用具体实现

3.抽象类也是类,可以增加普通方法构造方法成员变量

三.抽象类特性

1.抽象类不可以实例化,只能被继承,如果抽象类有抽象方法则子类必须重写父类的方法(不重写会报错),或者该子类也是抽象类

2.抽象方法不可以被prviate、final、static修饰(原因是必须满足重写的要求)

四.为何使用抽象类?

由上述共能可知抽象类的好处:

1.如之前写的Aminal、Shape中的一些方法被子类方法重写,不需要具体实现,就可以将这些类定义为抽象类,而抽象类可以有抽象方法,符合不需要具体实现的要求

2.可以对重写的方法进行验证

五.接口概念

接口可以看作公共的行为标准(能力),只要符合规范标准,就可以通用.如跑步的行为,狗能接受这个标准,而鱼就不能

六.接口语法

1.将关键字class换成关键字 interface,定义格式和继承一样

2.普通方法会默认加上public abstract,成员变量会默认加上public static final且得初始化

3.接口是引用类型不是类,不能实例化,字节码文件后缀还是  .class 文件

七.接口使用

在类和类得继承中用 extends (单词意思为扩展),在类和接口中用 implements (单词意思为实现)

八.接口和类中成员对比

成员类型接(Interface)类(Class)原因
成员变量(实例变量)❌ 不允许✅ 允许接口只定义行为契约,不维护状态,因此不能有实例变量。
常量(public static final✅ 允许(默认)✅ 允许(需显式声明)接口可以定义全局常量,但必须是 public static final(默认隐式)。
抽象方法(public abstract✅ 允许(默认)✅ 允许(需显式 abstract接口的核心是定义方法规范,所有方法默认是 public abstract
默认方法(default✅ 允许(Java 8+)❌ 不允许(普通方法自带实现默认方法允许接口提供默认实现,避免破坏现有代码。
静态方法(static✅ 允许(Java 8+)✅ 允许静态方法属于类/接口级别,不依赖实例。
私有方法(private✅ 允许(Java 9+)✅ 允许私有方法用于接口内部代码复用,不暴露给实现类。
构造方法(Constructor)❌ 不允许✅ 允许接口不能被实例化,因此不需要构造方法。
初始化块({} / static{}❌ 不允许✅ 允许接口不能包含状态,因此不需要初始化逻辑。
嵌套类/接口✅ 允许✅ 允许接口和类都可以包含嵌套类型。

接口应用举例:

九.多个接口使用和继承

在继承中不可以多继承,而一个类可以有多个接口例子如下:

十.接口继承接口

接口和接口之间的继承也用extends,用此可以达到多继承的效果

十一.Object类

Object是默认提供的一个类。所有类都会默认继承 Object 类,所有的类的对象都可以被 Object引用接收,Object 也定义了一些方法

1.对象比较equals方法

应用:

2.hashcode方法(了解)

功能:可以得出对象的位置,如果对象的成员变量相同则在同一位置

3.toString方法

十二.内部类(类和对象补充)

在Java中可以将一个类定义在另一个类中或方法中,在内部为内部类,外部为外部类

主要分为 静态内部类、实例内部类、匿名内部类

1.实例内部类

public class OutClass {private int a;static int b;int c;public void methodA{a=10;System.out.printin(a);}
public static void methodB(){System.out.printIn(b);}
//实例内部类:未被static修饰
class InnerClass{int c;public void methodinner(){// 在实例内部类中可以直接访问外部类中:任意访问限定符修饰的成员a=100;b =200;methodA();methodB();
//  如果外部类和实例内部类中具有相同名称成员时,优先访问的!部类自己的c=300;System.out.println(c);
//如果要访问外部类同名成员时候,必须外部类的名称.OutClass.this.c = 400;
System.out.println(OutClass.this.c)}
}
public static void main(String[] args)// 外部类:对象创建 以及 成员访问
OutClass outClass = new OutClass(
System.out.println(outClass.a)
System.out.println(QutClass.b
System.out.printIn(outClass.c);
outClass.methodA()
outClass.methodB()System.out.println("================实例内部类的访问=============")
// 要访问实例内部类中成员,必须要创建实例内部类的对象
//而普通内部类定义与外部类成员定义位置相同,因此创建实例内部类对象时必须借助外部类
// 创建实例内部类对象
OutClass.InnerClass innerClass1 =new QutClass().new InnerClass();
// 上述语法比较怪异,也可以先将外部类对象先创建出来,然后再创建实例内部类对象OutClass.InnerClass innerClass2 = outClass.new InnerClass();
innerClass2.methodinner();

2.静态内部类

public class OutClass {private int a;static int b;public void methodA(){a=10;System.out.println(a);public static void methodB(){System.out.println(b);}
}
// 静态内部类:被static修饰的成员内部类
static class InnerClass{public void methodinner(){
//    在内部类中只能访问外部类的静态成员
//    a=100; //编译失败,因为a不是类成员变量b =200;
//   methodA();  //编译失败,因为methodA()不是类成员方法
methodB;}
}
public static void main(String[] args) {
// 静态内部类对象创建 & 成员访问
OutClass.InnerClass innerClass =new OutClass.InnerClass();
innerClass.methodinner();}
}

3.匿名内部类(利用了接口)

十三.常用接口扩展

1.Comparable接口

俩对象的比较大小:

多对象比较大小:

目前结论:

只要是自定义类型,要比较实例化对象大小,就一定得实现Comparable接口

自己实现sort(利用冒泡排序)

该接口缺点:

每次运行都只能比较对象一个属性

2.Comparator接口

优点:

可以根据不同的属性创造不同的实现该接口的类重写compare方法来比较不同属性的对象

3.Cloneable接口

接口的源码:

作用:表示实现接口的类可以克隆

实现过程:

应用:

该实现过程没有将Money拷贝上属于浅拷贝,深拷贝得将Money也拷贝上

http://www.lryc.cn/news/586464.html

相关文章:

  • Linux系统编程——目录 IO
  • JavaScript:移动端特效--从触屏事件到本地存储
  • 一文理解缓存的本质:分层架构、原理对比与实战精粹
  • 深入理解设计模式之工厂模式:创建对象的艺术
  • Cypress与多语言后端集成指南
  • 数据结构——散列表
  • 为什么有些PDF无法复制文字?原理分析与解决方案
  • Cursor创建Spring Boot项目
  • 指令微调时,也要考虑提示损失
  • 《Java Web程序设计》实验报告六 JSP+JDBC+MySQL实现登录注册
  • 多表查询-4-外连接
  • xml映射文件的方式操作mybatis
  • 2025 全球酒店用品厂家竞争力排行榜发布:扬州卓韵领衔,布草工厂实力重塑行业格局
  • 使用iso制作ubuntu22.04docker镜像
  • 【数据结构初阶】--单链表(一)
  • ICCV2025 特征点检测 图像匹配 RIPE
  • dify 用postman调试参数注意
  • 【数据结构初阶】--顺序表(二)
  • Compose笔记(三十四)--LayoutModifier
  • Raft-领导者选举
  • 基于YOLO11的垃圾分类AI模型训练实战
  • C语言课程设计--电子万年历
  • 第十八天,7月12日,八股
  • Agent 设计模式
  • 卫星通信终端天线的5种对星模式之二:DVB跟踪
  • Mamba架构的模型 (内容由deepseek辅助汇总)
  • 关于赛灵思的petalinux zynqmp.dtsi文件的理解
  • C++ Primer(第5版)- Chapter 7. Classes -001
  • Web学习笔记3
  • Windows环境下JS计时器精度差异揭秘