2.17、内部类

  1. 2.17、内部类

2.17、内部类

内部类:在一个类的内部还有另外一个类。

范例:

class Outer{
    private String name = "hellow world!";
    class Inner{
        public void print(){
            System.out.println("name = " + name);
        }
    }
    public void fun(){
        new Inner().print(); //打印信息
    }
}

内部类的缺点可以看出就是程序的结构混乱

内部类的唯一有点:在于可以方便的访问外部类中的私有成员。

如果要在外部直接使用内部类的实例化对象:

  • 外部类.内部类 内部类对象 = 外部类实例.new 内部类实例();
class Outer{
    private String name = "hellow world!";
    class Inner{
        public void print(){
            System.out.println("name = " + name);
        }
    }
}

public class Demo02 {
    public static void main(String args[]) {
        Outer out = new Outer(); //外部类实例
        Outer.Inner in = out.new Inner(); //实例化内部类对象
        in.print();
    }
}

一个内部类如果使用static关键字声明的话,则此内部类就将成为外部类,可以直接通过外部类.内部类的形式访问。

class Outer{
    private  static String name = "hellow world!";
    static class Inner{
        public void print(){
            System.out.println("name = " + name);
        }
    }
}

public class Demo02 {
    public static void main(String args[]) {
        Outer.Inner in = new Outer.Inner(); //实例化内部类对象
        in.print();
    }
}

内部类可以在任何的地方使用,例如:在方法中声明。

class Outer{
    private String name = "hellow world!";
    public void fun(){
        class Inner{
            public void print(){
                System.out.println("name = " + name);
            }
        }
        new Inner().print();
    }

}

public class Demo02 {
    public static void main(String args[]) {
        new Outer().fun();
    }
}

在方法中定义的内部类,可以直接访问外部类中的各个成员,但是如果要访问方法中的参数,则在参数上要使用final关键字声明。

class Outer{
    private String name = "hellow world!";
    public void fun(final int temp){
        class Inner{
            public void print(){
                System.out.println("name = " + name);
                System.out.println("temp= " + temp);
            }
        }
        new Inner().print();
    }

}

public class Demo02 {
    public static void main(String args[]) {
        new Outer().fun(30);
    }
}

转载请注明来源