内部类
来源:互联网 发布:silverlight调用js 编辑:程序博客网 时间:2024/06/05 19:11
内部类
内部类分为四种,分别是:成员内部类,静态内部类,局部内部类和匿名内部类。
- 成员内部类:可以直接调用外部类方法和成员属性,可以直接创建内部类对象。 -
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