内部类
一,成员内部类(包括静态内部类和非静态内部类)
- 非静态内部类可以直接访问外部类的成员,反之则不行
- 非静态内部类不能有静态方法、静态代码块、静态初始化块
- 外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例
- Outer.Inner inner =new Outer().new Inner();在创建内部类对象时先创建外部类对象,依托外部类
- 成员访问要点
1.Outer.this.age 访问外部类属性
2.this.age 访问内部类属性
3.age 访问内部类的局部变量
package com.oop;
/*
* 测试非静态内部类
* */
public class TestInnerClass {
public static void main(String[] args) {
Outer.Inner inner =new Outer().new Inner();
inner.show();
}
}
class Outer{
private int age=10;
public void testOuter(){
System.out.println("Outer.testOuter()");
}
class Inner{ //成员内部类(加static就变为静态内部类,不加则是非静态内部类)
//可以直接访问外部类的方法,为外部类提供帮助的
int age=20;
public void show(){
int age=30;
System.out.println("外部类的成员变量"+Outer.this.age);
System.out.println("内部类的成员变量"+this.age);
System.out.println("局部变量"+age);
}
}
}
静态内部类
package com.oop;
/*
* 测试静态内部类
*/
public class TestStaticInnerClass {
private void mian() {
// TODO Auto-generated method stub
Outer2.Inner2 inner=new Outer2.Inner2();
}
}
class Outer2{
static class Inner2{
}
}
匿名内部类
package com.oop;
public class TestAnonymousInnerClass {
public static void test(A a){
a.aa();
}
public static void main(String[] args) {
TestAnonymousInnerClass.test(new A(){
@Override
public void aa() {
// TODO Auto-generated method stub
System.out.println("匿名内部类");
}
});
}
}
interface A{
void aa();
}
局部内部类
- 就是在一个方法中有类,该类只为该方法提供服务,很少用
网友评论