java修饰符:abstract final static 的区别
文章目录
- 前言
- 一、三者的基本概念对比
- 二、代码场景实操演示
- 1. abstract用法演示:抽象类+抽象方法
- 2. final用法演示:类/方法/变量
- 3. static用法演示:类成员+静态方法+静态代码块+静态内部类
- 4. 禁止组合的场景(面试高频坑点)
- 总结
前言
面试官:「说说 abstract、final、static 这三个访问修饰符的区别?」
答:
abstract是声明抽象,需要被继承或实现,用于类、方法;
final是声明不可改变,用于类、方法、变量;
static是声明静态,属于类而非实例,用于类、方法、变量、代码块;
其中abstract的核心理念是未完成,待实现,
final则是已完成,不可变,
static是属于类,但不依赖于实例。
阅读建议:建议观看视频后再阅读文章理解更深哦!建议观看视频后再阅读文章理解更深哦!
视频观看地址:视频跳转链接
一、三者的基本概念对比
| 修饰符 | 作用 | 可修饰的对象 | 核心理念 |
|---|---|---|---|
| abstract | 声明抽象,需要被继承/实现 | 类、方法 | “未完成,待实现” |
| final | 声明不可改变 | 类、方法、变量 | “已完成,不可变” |
| static | 声明静态,属于类而非实例 | 类、方法、变量、代码块 | “属于类,不依赖实例” |
二、代码场景实操演示
1. abstract用法演示:抽象类+抽象方法
//1. abstract用法演示:抽象类+抽象方法 abstract class AbstractDemo{//[重点]抽象方法:只有声明,无实现,强制子类重写 public abstract void abstractMethod();// 抽象类可以包含普通方法 public voidnormalMethod(){System.out.println("抽象类中的普通方法");}}子类必须实现抽象方法
// 子类必须实现抽象方法 class ConcreteDemo extends AbstractDemo{@Override public voidabstractMethod(){System.out.println("子类实现抽象方法");}}abstract核心:
- 抽象类不能实例化,必须被继承;抽象方法必须被子类实现(除非子类也是抽象类);
- 作用是强制子类遵循统一的接口规范,常用于框架的顶层设计(如Java集合的List接口)。
2. final用法演示:类/方法/变量
//2. final用法演示:类/方法/变量 //[重点]final类:禁止被继承 final class FinalClass{final int q=1;//[重点]final方法:禁止被子类重写 public final voidfinalMethod(){System.out.println("final方法,不可重写");}}final核心:
- final类禁止继承(如String类),final方法禁止重写,final变量赋值后不可修改;
- 作用是保证代码的稳定性,防止子类篡改父类逻辑,常用于定义常量、核心工具类。
3. static用法演示:类成员+静态方法+静态代码块+静态内部类
//3. static用法演示:类成员+静态方法+静态代码块+静态内部类 class StaticDemo{//[重点]static变量:属于类,所有实例共享 public static int staticCount=0;public int instanceCount=0;//[重点]static代码块 static{System.out.println("静态代码块执行");}// //[重点]static内部类 static class Inner{voidshow(){System.out.println("静态内部类");}}//[重点]static方法:属于类,不能访问非静态成员 public static voidstaticMethod(){System.out.println("静态方法,访问静态变量:"+ staticCount);// 编译报错:静态方法不能访问非静态成员 // System.out.println(instanceCount);}}static核心:
- static变量/方法属于类本身,而非实例,所有实例共享同一个静态变量;
- 静态方法不能访问非静态成员(因为静态方法加载时,实例还未创建),常用于工具方法(如Math类的静态方法)。
4. 禁止组合的场景(面试高频坑点)
- 编译报错:abstract和final不能同时修饰类(抽象类需要被继承,final类禁止继承)
abstract final class InvalidClass {}
- 编译报错:abstract和static不能同时修饰方法(抽象方法需要重写,静态方法不能重写)
public abstract static void invalidMethod();
总结
@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
我在「辣椒微创」有更详细的案例和工具,你应该用得上!(主页有指路)
🚀 【创业项目】:副业灵感、轻资产玩法、互联网创收思路
📦 【资源分享】:PPT、音效、模板、字体、插件等创作者工具合集
🔧 【软件下载】:精选高效、靠谱的生产力工具及安装指南
💻 【编程开发】:编程学习资源、项目源码、开发工具、实战案例
🛒 【薅羊毛】:精选各种优惠折扣、平台补贴信息,帮你省钱放大收益。
