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

    内部类:
          把一个类写在了另外一个类或者方法中!

    内部类的分类:
    1.成员内部类      直接定义在外部类的内部
         01.可以拥有private,protected访问权限修饰符
         02.如果外部类和内部类属性重名,默认使用内部类!就近原则!
                   想使用外部类的属性或者方法
                   外部类名.this.属性/方法名
         03.想访问内部类,必须先创建外部类对象          

    2.局部内部类     被定义在某个方法或者代码块中
          01.仅限于方法体内使用  ==》局部变量
            

    3.匿名内部类
         01.没有名称,看不到类的定义
         02.所有的匿名内部类必须继承一个类或者实现一个接口
         03.如果匿名内部类中需要了外部的参数,这个参数必须是final修饰

    4.静态内部类
        01.成员内部类 加载static
        02.不依赖与外部类,可以直接创建对象
        03.不能访问外部类非静态的属性和方法

    ***************************************************************************************************************

    1.
    /**
     *  外部类 必须是 public 修饰,不能更改 访问权限修饰符
     *  内部类可以设置 访问权限修饰符
     *  
     *  如果我们把Son单独提取成一个类
     *  这样任何地方都可以访问Son!
     *  现在把Son变成了内部类!
     *  别人必须想访问Father,才能拿到Son
     *  
     */
    public class Father { // 外部类
        /**
         * 外部类的成员变量
         */
        private static int age = 50;
        private String name = "小白";

        /**
         * 定义成员内部类
         */
        class Son { // begin Son
            int age = 100;
            String name = "小黑";

            /**
             * 内部类的方法
             */
            public void sayHello() {
                System.out.println("Son   成员内部类 打招呼的方法!");
                System.out.println("内部类age==>" + age);
                System.out.println("内部类name==>" + name);
                System.out.println("======获取外部类的属性=======");
                System.out.println("外部类age==>" + Father.this.age);
                System.out.println("外部类name==>" + Father.this.name);
            }
        } // end Son

        /**
         * 外部类的方法
         */
        public void getSon() {
            class Son { // 局部内部类 仅限于 getSon()方法
                public void sayHello() {
                    System.out.println("Son  局部内部类 打招呼的方法!");
                }
            }
            Son son = new Son();
            son.sayHello();
        }

        /**
         * 静态内部类
         */
        static class Son2 {
            public void sayHello() {
                System.out.println("Son2  静态内部类 打招呼的方法!" + age);
            }
        }
    }

    2.

    /**
     * 匿名内部类
     */
    public interface Animal {

        /**
         * 所有动物吃饭的方法
         */
        void eat();
    }

    3.
     
    import com.xdf.demo.Father.Son;
    import com.xdf.demo.Father.Son2;

    public class InnerClassDemo {

        public static void main(String[] args) {
            /**
             * 使用成员内部类
             * 01.实例化外部类对象
             * 02.通过外部类对象创建内部类对象
             * 03.调用内部类的属性和方法
             */
            Father father = new Father();
            Son son = father.new Son();
            son.sayHello();

            // 访问局部内部类
            father.getSon();

            // 访问静态内部类
            Son2 son2 = new Son2();
            son2.sayHello();

            // 访问匿名内部类
            Demo demo = new InnerClassDemo().new Demo();
            demo.animalEat("大大的");

        }

        class Demo { // 成员内部类


  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/WillimTUrner/p/8032410.html
Copyright © 2011-2022 走看看