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

    四种内部类

    实例内部类:直接定义在类当中的一个类,在类前面没有任何修饰符
    静态内部类:在内部类前面加static
    局部内部类:定义在方法内的类
    匿名内部类:属于局部内部类的一种特殊情况

    实例内部类:

    属于对象的内部类,不属于类的,你使用static修饰的内部类
    想要使用内部类,必须得先创建外部类
    创建内部类对象当中,会有一个外部类的引用
    在内部类当中可以访问外部类当中的成员
    在内部类当中,不能有静态成员
    外部类不能直接访问内部类当中的成员

    package com.xiongda.inner;
    
    class Outer {
        String name = "xiongda";
    
        class Inner {
            void print() {
                System.out.println(name);
            }
        }
    }
    
    /**
     * 
     * @author xiongda
     * @date 2018年8月5日
     * @description 创建实例内部类
     */
    public class InnerClassDemo1 {
        public static void main(String[] args) {
            Outer outer = new Outer();
            Outer.Inner inner = outer.new Inner();
            inner.print();
        }
    }

    静态内部类:

    在内部类前面加上static
    静态内部类是不需要创建外部对象
    在静态内部类当中,是没有外部类引用的
    静态内部类,是可以访问外部类的静态成员

    package com.xiongda.inner;
    
    class Outer2 {
        static class Inner {
            static String name = "xiongda";
            String signature = "handsome boy";
        }
    }
    
    /**
     * 
     * @author xiongda
     * @date 2018年8月5日
     * @description 创建静态内部类 访问静态内部类当中的静态成员 访问静态内部类当中的非静态成员
     */
    public class InnerClassDemo2 {
        public static void main(String[] args) {
            // 创建静态内部类
            Outer2.Inner inner = new Outer2.Inner();
            // 访问静态内部类的静态成员
            System.out.println(Outer2.Inner.name);
            // 访问静态内部类当中的非静态成员
            System.out.println(inner.signature);
        }
    }

    局部内部类:

    定义在方法中的内部类
    1.不能使用修饰符如 public private
    2.局部内部类只能在定义的方法中使用
    3.局部内部类当中不能包含静态变量
    4.局部内部类当中可以包含局部变量,使用的局部变量的本质是final 常量

    package com.xiongda.inner;
    
    class Outer3 {
        void test() {
            // 这前面的修饰符默认是final类型,是存放在方法区当中
            String name = "xiongda";
            class Inner {
                void print() {
                    System.out.println(name);
                }
            }
    
            Inner inner = new Inner();
            inner.print();
        }
    }
    
    /**
     * 
     * @author xiongda
     * @date 2018年8月5日
     * @description 创建局部内部类
     */
    public class InnerClassDemo3 {
        public static void main(String[] args) {
            Outer3 outer = new Outer3();
            outer.test();
        }
    }

    匿名内部类 :

    就是一个没有名字的局部内部类
    匿名内部类没有构造器 一个文件对应一个类
    当只使用一次的时候,才使用匿名内部类
    创建匿名内部类需要借助父类的构造器或者接口
    所以匿名内部类必须得有父类或者实现了接口
    内部写的代码在new的时候就会自动执行

    package com.xiongda.inner;
    
    interface OuterDevice {
        void work();
    
    }
    
    class Device {
        void connectTo(OuterDevice outerDevice) {
            outerDevice.work();
        }
    }
    
    /**
     * 
     * @author xiongda
     * @date 2018年8月5日
     * @description 创建匿名内部类
     */
    public class InnerClassDemo4 {
        public static void main(String[] args) {
            Device device = new Device();
            device.connectTo(new OuterDevice() {
    
                @Override
                public void work() {
                    System.out.println("键盘开始工作!");
    
                }
            });
            device.connectTo(new OuterDevice() {
    
                @Override
                public void work() {
                    System.out.println("鼠标开始工作!");
                }
            });
        }
    }
  • 相关阅读:
    使用Charles对iPhone进行Http(s)请求拦截(抓包)
    pip 安装 和 卸载 django
    python2.7.5 安装pip
    (Git 学习)Git SSH Key 创建步骤
    git学习四:eclipse使用git提交项目
    我们为什么要使用List和Set(List,Set详解)
    List、Set、Map的区别
    type=hidden
    测试业务分析
    USACO 3.2 kimbits DP
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/9425978.html
Copyright © 2011-2022 走看看