成员内部类和局部内部类
内部类是:一个类包含一个类 就是内部类 例如:人的身体和心脏 汽车车身和发动机的关系一样都是包含
分类:
1.成员内部类
2.局部内部类
3.匿名内部类
成员内部类
成员内部类定义
成员内部类格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
/...
}
/...
}
注意:内用外 随意访问 外用内 需内部类对象
代码:
public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//成员方法
public void BodyMethod(){
System.out.println("外部方法");
}
}
成员内部类的使用
1.间接方式:在外部类的方法中创建内部类对象并进行调用 在main方法中调用外部类对象
代码:
类
public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//成员方法
public void BodyMethod(){
System.out.println("外部方法");
Heart heart = new Heart();
heart.beat();
}
}
测试类
public class test {
public static void main(String[] args) {
Body body = new Body();
body.BodyMethod();
}
}
运行结果:
名字是null因为没有进行赋值 所以为空
2.直接方式 公式
外部类.内部类 对象名 = new 外部类().new 内部类();
代码:
类:
public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//成员方法
public void BodyMethod(){
System.out.println("外部方法");
}
}
测试类:
public class test {
public static void main(String[] args) {
Body body = new Body();
body.BodyMethod();
System.out.println("-------------------");
//这样写的就没有办法调用外部类的方法
Body.Heart bh=new Body().new Heart();
bh.beat();
}
}
内部类的同名变量访问
如果出现了重名现象 那么格式是外部类名称.this.外部类成员变量
代码:
类:
public class Outer {//外部类
int num=10;//成员变量
public class Inner{//成员内部类
int num=20;//成员内部类的成员变量
public void MethodInner(){//成员内部类的成员方法
int num=30;//成员内部类的局部变量
System.out.println(num);//调用成员内部类的局部变量 结果:30
System.out.println(this.num);//调用成员内部类的成员变量 结果:20
System.out.println(Outer.this.num);//调用外部类的成员变量 结果:10
}
}
}
测试类:
public class test {
public static void main(String[] args) {
//创建内部类对象
Outer.Inner oi=new Outer().new Inner();
oi.MethodInner();
}
}
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix