//1.成员内部类
class Outer{
private int num=4;//对内部类而言,这是外部内的成员,尽管是private,一样可以访问
public void test(){
Inner inner=new Inner();//这里是外部类调用内部类:内部内也可以被外部内以创建对象方式使用,但要注意的是,内部如如果是private,就不可访问了
inner.show();
}
class Inner{ //内部类:在一个类的内部定义类,类名为Inner
void show(){
System.out.println("num="+num); //这里是内部类访问了外部类的成员
}
}
}
/*public class Example10{
public static void main (String[] args){
Outer outer=new Outer();//最后的打印结果是:此处调用了外部内Outer、Outer又给内部类创建了Inner对象,使用了Inner的show方法打印而出
outer.test();
}
}
*/
//下边的在外部访问内部类,和Example10的结果是一样的,不同的是上面是通过访问test调用内部类,这里是直接访问内部类
class Example11{
public static void main(String[] args){
Outer.Inner inner =new Outer().new Inner();//这是通过外部访问一个外部内中的内部内的方式:外部内.内部类名 变量名= new外部内名.new内部类名
//注意:如上有两个new,第一个new是为外部类Outer创建了对象,第二个new是为内部类Inner创建了对象
inner.show();//调用内部类中的show方法
}
}
//2.静态内部类
class Outer{
private static int num=6;//静态内部类的成员,也必须是静态的 static 反之,如果是非静态类,就不能将成员定义为static,否则报错
static class Inner{ //静态内部类,static
void show(){
System.out.println("num="+num);//静态内部类中调用外部内成员,成员必须是静态
}
}
}
class Example11{
public static void main(String[] args){
Outer.Inner inner =new Outer.Inner();//调用静态内部类,注意,和非静态相比,这里只需要为外部内创建对象,然后直接调用了内部类
inner.show();//调用内部类中的方法
}
}
//3.方法内部类
class Outer{
private int num=4;
public void test(){//这是一个方法
class Inner{ //这是在方法中,定义一个类
void show(){ //类中又有一个方法,执行了打印
System.out.println("num="+num);
}
}
Inner inner=new Inner();//由于是方法中的类,因此实例化只能在方法中进行
inner.show();
}
}
public class Example12{
public static void main(String[] args){
Outer outer =new Outer();//实例化类
outer.test();//调用类中的方法
//outer.show(); 发现不能直接调用方法中的内部类中的方法
}
}
/**类中可以有类能理解,静态内部类也能接受,但是没理解方法中的类存在的意义*/