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