成员内部类和局部内部类

内部类是:一个类包含一个类 就是内部类 例如:人的身体和心脏 汽车车身和发动机的关系一样都是包含

分类:

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();

}
}

运行结果:

posted @   baimingze  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示