内部类
在一个类的内部的类,内部类最大优点,可以方便的访问外部类的私有方法
实例化内部类时,必须先实例化外部类,如果内部类时private修饰,那么不能通过这种方式实例化,必须在外部类里面处理
public static void main(String [] args){Ounter.Inner inner = new Outer().new Inner();inner.print();}
内部类访问外部类属性实例
class Outer{private String name = "hello";class Inner {//内部类public void print(){//访问外部私有属性System.out.println(name);}}public void printOut(){new Inner().print();}}public class TestInner{public static void main(String [] args){Outer outer = new Outer();outer.printOut();}}
外部类直接访问内部类私有属性
class Outer{private String name = "hello";class Inner {//内部类private String info = "你好!";public void print(){System.out.println(name);}}public void printOut(){//通过外部类的方法访问内部类的私有属性System.out.println(new Inner().info);}}public class TestInner{public static void main(String [] args){Outer outer = new Outer();outer.printOut();}}
static 内部类
访问 方式 Outer.Inner inner = new Outer.Inner();
class Outer{private static String name = "hello";static class Inner {//内部类public void print(){System.out.println(name);}}}public class TestInner{public static void main(String [] args){Outer.Inner inner = new Outer.Inner();inner.print();}}
方法内部类
在jdk1.8之前,方法内部类需要访问方法的属性,必须把方法定义为final int num。
class Outer{private static String name = "hello";public void print(int num){int numa = 100;class Inner {//方法内部类public void print(){System.out.println(Outer.this.name);System.out.println("方法内部类方法属性:"+numa);System.out.println("方法内部类方法参数:"+num);}}new Inner().print();}}public class TestInner{public static void main(String [] args){Outer outer = new Outer();outer.print(50);}}//结果//hello//方法内部类方法属性:100//方法内部类方法参数:50