怕什么真理无穷

导航

关于内部类之成员内部类、静态内部类、方法内部类的简单理解

//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(); 发现不能直接调用方法中的内部类中的方法
    }
}
/**类中可以有类能理解,静态内部类也能接受,但是没理解方法中的类存在的意义*/

 

posted on 2021-01-26 23:09  惭愧书生  阅读(123)  评论(0)    收藏  举报