【Java基础】内部类
1.内部类
在一个类的内部再定义一个类,内部类和外部类名字不能相同。
可以分为
- 成员内部类:静态、非静态
- 局部内部类:方法内、代码块内、构造器内,匿名内部类
2.成员内部类
(1)非静态
① 和普通类差不多,可以在内部定义属性、方法、构造器等结构。
② 可以使用public、protected、缺省、private修饰。
③ 可以用abstract、final修饰。
④ 不能用static修饰内部类中的结构。
public class Person { String name = "张三"; public void eat() { System.out.println("张三吃东西"); } class Bird { String name = "小杜"; public void fly(String name) { System.out.println(name+"起飞"); } } }
⑤ 使用外部类的结构
成员内部类可以直接使用外部类的所有成员,包括私有数据。
public void fly(String name) { System.out.println(name+"起飞"); //形参 System.out.println(this.name+"起飞"); //内部类属性 System.out.println(Person.this.name+"起飞"); //外部类属性 }
⑥ 使用内部类的结构
Person类中,直接创建对象
Bird bird1 = new Bird(); bird1.fly("3"); //或者 Person.Bird bird2 = new Person.Bird(); bird2.fly("2");
Person 类外
Person person = new Person(); Person.Bird bird3 = person.new Bird(); bird3.fly("3");
(2)static修饰,静态
内部类是静态的,有一个静态属性age。
① 当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的。
② 内部类成员想要用static修饰,则内部类也要用static修饰,否则报错。
public class Person { String name = "张三"; public void eat(String name) { } static class Bird { String name = "小杜"; static int age = 4; public void fly(String name) { System.out.println(name + "起飞"); //形参 } } }
③ 调用内部类的静态结构
public static void main(String[] args) { System.out.println(Bird.age); }
3.局部内部类
(1)局部内部类
写在方法或代码块中,先声明后使用,作用域为所在花括号内。
public class Person { String name = "张三"; public void eat(String name) { class Bread{ private int price; public void sell(){ System.out.println("卖面包"); } } } }
特点
- 局部内部类仍是一个独立的类,编译后会产生独立的.class文件,但是前面会加上外部类的类名、$符号和数字编号。
- 只能在作用域范围内使用,先声明后使用,类似局部变量,因此局部内部类不能用权限修饰符。
- 可以使用外部类的成员,包括私有的。
- 局部内部类不能使用static修饰,因此也不能包含静态成员。
(2)匿名内部类
某个局部类只需要使用一次,定义在new的后面,隐含实现一个接口或一个类。
Java匿名内部类
分类:
Java / JAVA基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本