内部类

一、内部类

  内部类是指定义在另外一个类里面的类,这叫做内部类,就是在类里面定义类,内部类又分为成员内部类和局部内部类。

  1、成员内部类

    成员内部类是指定义在外部类的成员位置。

package gc.test.java.cs2;

public class Info{
    
    public String name = "张三";
    protected String sex = "男";
    String addr = "湖北武汉";
    private int age = 20;
    
    class User{//User是一个成员内部类
        
        public void init1(){
            System.out.println(name);
            System.out.println(sex);
            System.out.println(addr);
            System.out.println(age);
        }
        
    }
    
    public void show(){
        User user = new User();
        user.init1();
    }
}
package gc.test.java.cs1;

import gc.test.java.cs2.Info;

public class Main {

    public static void main(String[] args) {
        Info info = new Info();
        info.show();
    }
}

运行结果:

张三

湖北武汉
20

通过上面运行结果可以看出,成员内部类可以直接访问外部内的成员,即使是私有成员也可以访问。

下面我们在成员内部类中加上和外部内同样的变量,看下结果是怎么样的

package gc.test.java.cs2;

public class Info{
    
    public String name = "张三";
    protected String sex = "男";
    String addr = "湖北武汉";
    private int age = 20;
    
    class User{//User是一个成员内部类
        public String name = "李四";
        protected String sex = "女";
        String addr = "北京";
        private int age = 30;
        
        public void init1(){
            System.out.println(Info.this.name);
            System.out.println(Info.this.age);
            System.out.println(this.name);
            System.out.println(name);
        }
        
    }
    
    public void show(){
        User user = new User();
        user.init1();
        System.out.println("成员内部类的age:" + user.age);
    }
}

运行结果:

张三
20
李四
李四
成员内部类的age:30

通过上面运行结果可以看出,成员内部类是可以访问外部类的变量的,通过外部类名.this.变量名称就可以访问,同样也可以看出,外部内也可以访问成员内部类的变量,即使是私有的也可以,需要实例化成员内部类才能访问。

package gc.test.java.cs1;

public class Base {
    
    public String sex = "男";
}
package gc.test.java.cs2;

import gc.test.java.cs1.Base;

public class Info{
    
    public String name = "张三";
    
    class User extends Base{//User是一个成员内部类
        
    }
    
    public void show(){
        User user = new User();
        System.out.println("成员内部类的name:" + user.name);//编译报错
        System.out.println("成员内部类的sex:" + user.sex);
    }
}

通过上面代码,可以看出,成员内部类和外部内是没有继承关系的。

  

  2、局部内部类

    局部内部类是指内部类定义在方法和作用域内。

package gc.test.java.cs2;

public class Info{
    public String name = "张三";
    protected String sex = "男";
    String addr = "湖北武汉";
    private int age = 20;
    
    public void init(){
        class User{//User是一个局部内部类
            public void show(){
                System.out.println(name);
                System.out.println(sex);
                System.out.println(addr);
                System.out.println(age);
            }
        }
        
        User user = new User();
        user.show();
    }
}
package gc.test.java.cs1;

import gc.test.java.cs2.Info;

public class Main {

    public static void main(String[] args) {
        Info info = new Info();
        info.init();
    }
}

运行结果:

张三

湖北武汉
20

通过上面运行结果可以看出,局部内部类也可以访问外部内的成员,包括私有的也可以。

原文地址:https://www.cnblogs.com/guochang/p/9558667.html