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

    成员内部类

    当成外部类的一个属性

    1, 私有变量变得不“私有”了,访问起来很方便

    public class Outter {
        private String outName = null;
        public void fun() {
            // 内部类(别的类可以直接使用私有变量)
            class Inner{
                public void getInfo() {
                    System.out.println(outName);
                }
            }
        }
    }

    2, 在内部内中this指向外部类,“外部类.this”指向内部类

    3, 实例化内部类:外部类.内部类 对象名 = new 外部类().new 内部类()

    public class Outter {
        class Inner{
            public void sayHi() {
                System.out.println("hi...");
            }
        }
        public static void main(String[] args) {
            /*
             * 类型:外部类.内部类
             * 先new外部类,再new内部类
             * */
            Outter.Inner innerc = new Outter().new Inner();
            innerc.sayHi();
        }
    }

    4, private内部类:该内部类不能实例化

    5, static内部类:在该内部类中同样不能访问静态变量和方法

    6, 实例化static内部类:外部类.内部类 对象名 = new 外部类.内部类()

    public class Outter {
        static class Inner{
            public void sayHi() {
                System.out.println("hi...");
            }
        }
        public static void main(String[] args) {
            /*
             * 类型:外部类.内部类
             * 访问静态变量,再new
             * */
            Outter.Inner innerc = new Outter.Inner();
            innerc.sayHi();
        }
    }

     局部内部类

    在方法中定义

    不能直接使用方法的变量和参数(JDK1.8以下需使用fina修饰方法变量)

    public class Outter {
        public static void main(String[] args) {
            String funName= null;
            class Inner{
                // 内部类成员变量,用来传递方法变量
                String innerName = null;
                public void getInfo() {
                    // 直接使用方法变量,报错
                    name= "Marry"; 
                    // 把方法变量赋值给内部成员变量就可以使用了
                    innerName = funName;
                }
            }
        }
    }

    匿名内部类

    1,不能有构造函数

    2,不能有静态成员变量或方法

    3,属于局部内部类

      new 父类构造器(参数列表)|实现接口() {  
         //匿名内部类的类体部分  
        }

    常用语swing编程或多线程

        new Thread() {
                int num = 5;
                public void run() {
                    while(num > 0){
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        num--;
                        System.out.println("线程A:" + num);
                    }
                }
            };
  • 相关阅读:
    POJ 2823 Sliding Window & Luogu P1886 滑动窗口
    Luogu P2970 [USACO09DEC]自私的放牧
    Luogu P2922 秘密消息
    Luogu P3353 在你窗外闪耀的星星
    Luogu P2580 于是他错误的点名开始了
    Floyd详解
    高精度模板
    51Nod P1100 斜率最大
    洛谷——P1025 数的划分
    洛谷——P1063 能量项链
  • 原文地址:https://www.cnblogs.com/huanggy/p/9190199.html
Copyright © 2011-2022 走看看