**
代码里面有详细解释:
- 内部类以及内部类成员变量
**
类p1
//外部类
public class p1 {
// 外部类变量
private Integer num=100;
// 外部类方法
public void method1(){
System.out.println(" p1 method1");
}
// 内部类
public class p1p1{
// 内部类变量
private Integer num=10;
// 内部类方法
public void method1(){
// 内部类局部变量
Integer num=1;
System.out.println("p1p1 method1");
// 直接输出的是局部变量
System.out.println(num);
// this.表示当前类
System.out.println(this.num);
// p1.this 是指定类的范围 ,此处表示为外部类的范围
System.out.println(p1.this.num);
}
}
}
测试类:
public class test01 {
public static void main(String[] args) {
//普通的外部类不用解释了
p1 p=new p1();
System.out.println("p1:");
p.method1();
System.out.println("p1p1:");
//格式: 类名.方法名 对象名=new 外部类名().new 内部类名();
p1.p1p1 p1p1=new p1().new p1p1();
p1p1.method1();
}
}
运行结果:
p1:
p1 method1
p1p1:
p1p1 method1
1
10
100
Process finished with exit code 0
- 匿名内部类:
这个要通过接口来说明
接口dog
public interface dog {
void bark();
}
dog接口的Impl实现类
@Service
public class dogServiceImpl implements dog {
@Override
public void bark() {
System.out.println("ServiceImpl dog bark");
}
}
最后来一个测试类:
(同样,解释在代码中)
public class test01 {
public static void main(String[] args) {
//new 一个匿名内部类
//PS: 实际上是 new一个接口,并实现这个接口[就是实现这个接口的所有方法]
dog d1=new dog() {
@Override
public void bark() {
System.out.println("dog1 bark");
}
};
d1.bark();
//这个也是匿名内部类,但是连对象名字都丢弃了
//因此可以在后边直接调用他的方法,但是只能调用一个方法,并且只能使用一次
new dog() {
@Override
public void bark() {
System.out.println("无名 dog bark");
}
}.bark();
//最后使用 dog的Impl实现类来调用一下
dogServiceImpl dImpl=new dogServiceImpl();
//多态创建法
dog dogservice=new dogServiceImpl();
//结果应该是一样的,都是调用了Impl实现类的方法
dImpl.bark();
dogservice.bark();
}
}

本文深入解析Java内部类的定义、使用及访问权限,通过实例演示内部类、内部类成员变量和方法的调用过程,同时介绍了匿名内部类的实现方式及其应用场景。
1710

被折叠的 条评论
为什么被折叠?



