内部类
内部类分为四种,分别是:成员内部类,静态内部类,局部内部类和匿名内部类。
- 成员内部类:可以直接调用外部类方法和成员属性,可以直接创建内部类对象。
- -
public class A {
private int a = 10;
private void show() {
System.out.println(a);
}
class B {
private int b;
private void show1() {
b = a + 10;
System.out.println(b);
}
}
public static void main(String[] args) {
A a2 = new A();
B b = a2.new B();
a2.show();
b.show1();
}
}
输出结果:
10
20
- 静态内部类:静态内部类就是用static修饰的内部类,静态内部类只能访问外部类的静态属性和静态方法。
public class B {
private int a = 100;
private static int b = 200;
void show() {
System.out.println("aaa");
}
static void show1() {
System.out.println("bbb");
}
static class C {
private int c = 10;
void show3() {
// c=a+10; 不能访问成员a
c = b + 10;
// show(); 不能调用方法show()
show1();
System.out.println(c);
}
}
public static void main(String[] args) {
C c = new C();
c.show3();
}
}
输出结果:
bbb
210
注意静态不能访问非静态。
- 局部内部类:在方法内部定义的内部类称为局部内部类,局部内部类只对方法内有效,所以不能使用权限修饰符,只能用final、abstract,方法外不能创建局部内部类对象;用static修饰的方法中定义的局部内部类可以访问外部类的static成员。
public class C {
private int a = 10;
void show() {
class D {
private int b=100;
void show1() {
System.out.println(b + 10+"我没执行");
}
}
System.out.println(a+10+new D().b+"我执行了");
}
public static void main(String[] args) {
C c = new C();
c.show();
System.out.println(c.a);
}
}
输出结果:
120我执行了
10
局部内部类只能在方法中执行
- 匿名内部类:匿名内部类只能使用一次,或者说如果需求只需要使用这个类一次,那么就创建一个匿名内部类;匿名内部类的创建就是再定义类的同时就创建了这个类。
public abstract class D {
abstract void eat();
public static void main(String[] args) {
D d = new D() {
@Override
void eat() {
System.out.println("吃");
}
};
d.eat();
}
}
只能实现父类已有的方法,不能有自己独特的方法
————SpringAndI