内部类
在一个类的内部的类,内部类最大优点,可以方便的访问外部类的私有方法
- 实例化内部类时,必须先实例化外部类,如果内部类时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