java基础学习要点三:内部类

来源:互联网 发布:程序员的未来规划 编辑:程序博客网 时间:2024/05/16 14:01

1. 内部类访问规则

● 内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this

● 外部类要访问内部类,必须建立内部类对象

/*内部类示例*/class Outer {int x = 3;class Inner {int x = 4;void function(){System.out.println("inner:" + Outer.this.x);}}void method() {System.out.println(x);}}public class InnerClassDemo {public static void main(String[] args) {Outer.Inner in = new Outer().new Inner();in.function();}}

2. 静态内部类

● 当内部类被static修饰后,只能直接访问外部类中的static成员

● 注意:当内部类中定义了静态成员,该内部类必须是static的。
   当外部类中的静态方法访问内部类时,内部类也必须是static的。

/*静态内部类示例*/class Outer {static int x = 3;static class Inner {void function(){System.out.println("inner:" + x);}}void method() {System.out.println(x);}}public class InnerClassDemo {public static void main(String[] args) {new Outer.Inner().function();}}

3. 内部类定义原则

● 当内部类中定义了静态成员,该内部类必须是static的。当外部类中的静态方法访问内部类时,内部类也必须是static的。

● 当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事务在使用外部事物的内容。

4. 局部内部类

● 内部类定义在局部时,不可以被成员修饰符修饰。
● 可以直接访问外部类中的成员,因为还持有外部类中的引用。
● 不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

/*局部内部类示例*/class Outer {int x = 3;void method(final int a) {final int y = 4;class Inner {void function() {System.out.println(y);}}new Inner().function();}}public class InnerClassDemo {public static void main(String[] args) {Outer out = new Outer();out.method(7);out.method(8);}}

5. 匿名内部类

/*匿名内部类:1 匿名内部类其实就是内部类的简写格式。2 定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。3 匿名内部类的格式:new 父类或者接口(){定义子类的内容}4 其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。5 匿名内部类中定义的方法最好不要超过3个。*/abstract class AbsDemo {abstract void show();}class Outer {int x = 5;void function() {new AbsDemo() {void show() {System.out.println(x);}}.show();}}public class NoNameInnerClassDemo {public static void main(String[] args) {new Outer().function();}}
原创粉丝点击