zoukankan      html  css  js  c++  java
  • 内部类

    一、内部类

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

      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

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

  • 相关阅读:
    跳跃游戏1,2
    重叠子区间问题
    最长公共子序列问题
    由leetcode俄罗斯套娃信封问题到C++的sort()函数学习
    一道笔试题,做的很垃圾
    Spring boot框架快速入门
    Redis常用数据类型及其对应的底层数据结构
    Java 类加载机制及双亲委派模型
    Java面试高频知识点总结 part3
    Spring框架专题
  • 原文地址:https://www.cnblogs.com/guochang/p/9558667.html
Copyright © 2011-2022 走看看