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

    一、内部类:将一个类定义在另一个类或者方法中!

    二、内部类可以分为4类:

    1、成员内部类

    public class SurfaceClass {// 外部类
        private static int a = 1;
        private int b = 2;
    
        /**
           可以访问我们外部类的所有属性和方法!
            如果我们想访问内部类!必须要有外部类! 只能通过外部类来
         */
        class InnerClass {// 成员内部类
            public void hello() {
                int a = 10;
                int b = 20;
                System.out.println(a);// 10
                System.out.println(b);// 20
                System.out.println(SurfaceClass.this.a);// 1
                System.out.println(SurfaceClass.this.b);// 2
    
            }
        }
    }
    
    /**
     * 测试类
     * @author lzw
     * 2017-8-4
     * 每个人都有自己的梦想。努力拼搏吧!不要让自己后悔!
     */
    public class InnerClassTest {
        public static void main(String[] args) {
            /*访问内部类!
             1.创建外部类对象
                SurfaceClass surfaceClass = new SurfaceClass();
             2.通过外部类对象创建内部类对象
                 InnerClass innerClass = surfaceClass.new InnerClass();
             3.调用对应的方法
                innerClass.hello();
            */
            SurfaceClass surfaceClass = new SurfaceClass();
            InnerClass innerClass = surfaceClass.new InnerClass();
            innerClass.hello();
        }

    /*注意点:
    01.内部类可以拥有private,protected访问权限修饰符!
    02.如果外部类和内部类有相同的属性或者方法的时候, 默认是就近原则,取内部类的属性或者方法!
    我们想调用外部类的属性和方法使用 ===>外部类名.this.属性/方法名*/

    
    }

    2、局部内部类

    public class SurfaceClass {// 外部类
        // 外部类的方法
        public void getInner() {
            class InnerClass { // 这个类被定义在了一个方法中 ===》局部内部类
                public void sayBye() {
                    System.out.println("再见了!老大哥!");
                }
            }
            InnerClass innerClass = new InnerClass(); // 仅限于本方法中使用
            innerClass.sayBye();
    
        }
    }
    
    /**
     * 测试类
     * @author lzw
     * 2017-8-4
     * 每个人都有自己的梦想。努力拼搏吧!不要让自己后悔!
     */
    public class InnerClassTest {
        public static void main(String[] args) {

        局部内部类
          类被定义在一个方法体或者作用域中!
        注意点:
          001.这个类仅限于当前方法使用!
          002.可以理解成局部变量

            SurfaceClass surfaceClass = new SurfaceClass();
            surfaceClass.getInner();
        }
    }

    3、匿名内部类

    /**
     * 匿名内部类的使用
     * @author lzw
     * 2017-8-4
     * 每个人都有自己的梦想。努力拼搏吧!不要让自己后悔!
     */
    public class InnerClassTest {
        public static void main(String[] args) {
            /*注意点
            001.没有名字
            002.只能使用一次
            003.前提:必须继承一个类或者实现某个接口
            004.接口或者抽象类中的所有抽象方法必须全部实现!
            
            在我们的程序中,有一个类只使用了一次,那么我们没有必要单独去创建一个类!这时候就使用匿名内部类!*/
            Thread thread = new Thread(new Runnable() {// 匿名内部类
                        @Override
                        public void run() {
                            for (int i = 0; i < 10; i++) {
                                System.out.println("老大哥辛苦了");
                            }
                        }
                    });
            thread.start();
        }
    }

    4、静态内部类

    public class SurfaceClass {
        // 静态内部类
        static class InnerClass {
            public void hello() {
                System.out.println("InnerClass静态内部类");
            }
        }
    }
    
    
    /**
     * 静态内部类的使用
     * @author lzw
     * 2017-8-4
     * 每个人都有自己的梦想。努力拼搏吧!不要让自己后悔!
     */
    public class InnerClassTest {
        /*静态内部类
           就是在内部类的修饰符上加了 static ! 静态了!不依赖于外部类了!
           不能访问外部类的所有非静态的属性和方法!*/
        public static void main(String[] args) {
            InnerClass innerClass = new InnerClass();
            innerClass.hello();
        }
    }
  • 相关阅读:
    Eclipse汉化
    Sublime Text 3 插件安装
    HTML5中canvas的save和restore方法
    No module ata_piix found的解决方法
    在虚拟机和主机之间共享文件夹
    C语言:文件操作
    ubuntu下的第一个脚本file.sh
    解析java源文件
    Compile Java Codes in Linux Shell instead of Ant Script
    Eclipse的XML编辑器解决方案
  • 原文地址:https://www.cnblogs.com/wiseroll/p/7286299.html
Copyright © 2011-2022 走看看