所谓内部类,就是在一个类中声明的类称为内部类。
1.为什么要有内部类呢?
2.什么是内部类呢?
class="java" name="code">public class Outer { public void run(){ System.out.println("Hello,I'm in the Outer!!!"); } public class Inner{ public void run(){ System.out.println("Hello,I'm in the Inner..."); } } }
?3.如何调用内部类的实例对象呢?
内部类的实例化有两种方法:
Outer.Inner inner = new Outer().new Inner(); inner.run();
?
Outer outer = new Outer(); Inner inner = outer.new Inner(); inner.run(); //调用内部类的方法 outer.run(); //调用外部类的方法
?4.内部类可以调用外部类的实例变量
?
?
public class Outer { private String name = "tom"; public class Inner{ public void run(){ System.out.println("Inner..."+name); } } }
name只有一个属性值,输出的结果就是:Inner...tom
?
如果在内部类的内部也声明了一个name属性的话,那么它就会根据就近原则,选择离它最近的name值,如果是这样的话,怎么调用外部类的属性值呢?
public class Outer { private String name = "tom" public class Inner{ private String name = "jerry"; public void run(){ System.out.println("Hello, Inner..."+ Outer.this.name); System.out.println("Hello, Inner..."+this.name); } } }
?输出结果:Hello,Inner...tom ? ? ? ? ?
? ?Hello,Inner...jerry
5.在外部类内部创建内部类对象
在外部类创建内部类对象,直接创建就可以了
?
public class Outer { public void hi(){ Inner in = new Inner(); in.run(); } public class Inner{ public void run(){ …… } } }
?6.静态内部类
?静态内部类就是用static修饰的内部类
public static class Inner{ ?
? ? ? ?……
}
在创建时,用外部类直接调用来创建:Outer.Inner inner = new Outer.Inner();
静态内部类的方法可以调用外部类的静态属性:
public class Outer { private static String name = "jack"; public static class Inner{ private static String name = "merry"; public void sayHi(){ System.out.println("Hello "+Outer.name); System.out.println("Hello "+ name); } } }
?输出结果:Hello jack
? ?Hello merry
7.局部内部类
局部内部类创建在一个方法中,作用范围在这个方法中
public class Outer{ public void hi(){ class Inner{ public void sayHello(){ System.out.println("Hello"); } } Inner inner = new Inner(); inner.sayHello(); } }
?为什么采用局部内部类?
public interface Usb { public void run(); } public Usb getUsb(){ return new Usb() { @Override public void run() { System.out.println("USB RUN..."); } }; }