1.内部类的分类成员内部类(静态和非静态)和局部内部类(方法内、代码块内、构造器内)
2.成员内部类的理解一方面,作为外部类的成员: >调用外部类的结构
>可以被static修饰
>可以被4种不同的权限修饰 另一方面,作为一个类: > 类内可以定义属性、方法、构造器等
> 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
> 可以被abstract修饰 特点:
[url=][/url]
public class test { public static void main(String[] args) { //创建静态的成员内部类的对象 Person.Inner2 inner2 = new Person.Inner2(); //创建非静态的成员内部类的对象 Person p = new Person(); Person.Inner1 inner1 = p.new Inner1(); inner1.show();//name = 小张, age = 23 inner2.show();//静态成员内部类 }}class Person{ String name; int age; //非静态成员内部类 class Inner1{ public void show(){ name = "小张"; age = 23; System.out.println("name = " + name + ", age = "+ age); } } //静态成员内部类 static class Inner2{ public void show(){ System.out.println("静态成员内部类"); } } public void eat(){ System.out.println("人吃饭"); }}[url=][/url]
3.如何在成员内部类中调用外部类的结构?[url=][/url]
class Person{ String name = "小明";public void eat(){}//非静态成员内部类 class Bird{ String name = "杜鹃"; public void display(String name){ System.out.println(name);//方法的形参 System.out.println(this.name);//内部类的属性 System.out.println(Person.this.name);//外部类的属性 //Person.this.eat(); } }}[url=][/url]
4.局部内部类特点:- 不能用访问权限修饰符关键字
- 作用区间只在申明的局部内
5.匿名内部类特点:- 匿名内部类不能使用 static 和权限修饰符
- 匿名内部没有构造器。通过new XXX 的生成一个对象引用。
- 匿名内部类属于局部内部类,所有局部内部类限制的条件在匿名内部中依然有效
|