内部类与局部内部类
1、什么是内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
1.成员内部类 :定义在类中方法外的类。
定义格式:
class 外部类 {
class内部类{
}
}
2.访问特点
内部类可以直接访问外部类的成员,包括私有成员。 外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:
外部类名.内部类名 对象名=new 外部类名().new 内部类名()
举例代码:
1.内部类
package DemoTest.DemoTest2;
public class person {
private String name;
public class xianren{
public void XianShow(){
System.out.println("仙人模式!");
System.out.println("我叫"+name);
}
}
public void show(){
System.out.println("间接调用内部类!");
xianren xr = new xianren();
xr.XianShow();
}
public person() {
}
public person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.测试类
package DemoTest.DemoTest2;
public class Test {
public static void main(String[] args) {
//第一种调用方法
person p = new person();
p.setName("鸣人");
p.show();
System.out.println("========================");
//第二种调用方法
person.xianren x = p.new xianren();
x.XianShow();
System.out.println("========================");
//第三种调用方法
//外部类名.内部类名 对象名=new 外部类名().new 内部类名()
person.xianren obj= new person("鸣人").new xianren();
obj.XianShow();
}
}
3.结果:
间接调用内部类!
仙人模式!
我叫鸣人
========================
仙人模式!
我叫鸣人
========================
仙人模式!
我叫鸣人
举例代码2:
获取不同地址的值
1.不同位置的num
public class Denoquzhi {
int num=10;
class Quzhi{
int num=20;
public void print(){
int num=30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Denoquzhi.this.num);
}
}
public void da(){
System.out.println("间接调用");
Quzhi q = new Quzhi();
q.print();
}
}
2.测试类
package DemoTest.Demoquzhi;
public class Teat {
public static void main(String[] args) {
//间接调用
Denoquzhi d = new Denoquzhi();
d.da();
System.out.println("===================");
//格式规定的直接调用
Denoquzhi.Quzhi dui=new Denoquzhi().new Quzhi();
dui.print();
}
}
3.结果:
间接调用
30
20
10
===================
30
20
10
2、局部内部类
举例代码:
1.在类的方法内包含了一个内部类
package DemoTest.DemoSamill;
public class Demosamill {
public void method(){
class MethodClass{
int num=10;
public void print(){
System.out.println("局部内部类");
System.out.println(num);
}
}
MethodClass m = new MethodClass();
m.print();
}
}
2.测试类
package DemoTest.DemoSamill;
public class Test {
public static void main(String[] args) {
Demosamill d = new Demosamill();
d.method();
}
}
3.结果
局部内部类
10