zoukankan      html  css  js  c++  java
  • JAVA中的内部类

    内部类?

    一个类中有类,实现了类的隐藏,实现了多重继承,内部类拥有所有的外部类所拥有的属性和方法的访问修饰符
    避免修改接口的时候出现同名方法

    内部类分为四种:

    成员内部类、局部内部类、静态内部类、匿名内部类

    第一种成员内部类

    package cn.inner.member;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Animal {
        public int age;
        private String name;
    
        public void eat() {
    
        }
    
        protected void show() {
    
        }
    
        class Dog {
            public void play() {
                System.out.println(name);
                eat();
            }
        }
    }
    
    测试类
    package cn.inner.member;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Test {
    
        public static void main(String[] args) {
            // 创建外部类的实例;
            Animal.Dog dog = new Animal().new Dog();
            dog.play();
    
        }
    }

    成员内部类
    1 如果我们想访问内部类,我们必须要有外部类的实例!只能通过外部类来访问
    2 成员内部类可以拥有private、protected访问权限

    第二种  局部内部类

    package cn.inner.local;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Animal {
        public void eat(String food) {
            // 局部内部类
            class Dog {
                public void show() {
                    System.out.println(food);
                }
            }
            // 创建内部类的实例
            new Dog().show();
        }
    }
    
    测试类
    
    package cn.inner.local;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Test {
    
        public static void main(String[] args) {
            Animal animal = new Animal();
            animal.eat("刘洋洋");
        }
    
    }

    局部内部类

    1 定义在方法体或者作用域的类
    2 仅限方法体的内部使用
    3 当我们所在方法的形参需要在内部类中使用时!那么这个参数必须要用final修饰(在jdk1.8中则不用添加(final))

    第三种  静态内部类

    package cn.inner.statics;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Animal {
        // 非静态属相
        public int age;
        // 静态属性
        public static String name;
    
        // 非静态方法
        public void eat() {
    
        }
    
        // 静态方法
        public static void run() {
            System.out.println("静态内部类");
        }
    
        // 静态内部类
        static class Dog {
            public void show() {
                run();
            }
        }
    }
    
    测试类
    
    package cn.inner.statics;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Text {
        public static void main(String[] args) {
            Animal.Dog dog1 = new Animal.Dog();
            dog1.show();
        }
    
    }

    静态内部类
    1 不依赖于外部类
    2 在内部类上加上 static
    3 不能访问外部非静态的方法和属性

    第四种  匿名内部类

    package cn.inner.anonymous;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public abstract class Animal {
        abstract void eat();
    }
    
    测试类
    
    
    package cn.inner.anonymous;
    
    /**
     * @2018年4月6日
     * @王 鸿
     * @Administrator
     */
    public class Test {
        public static void main(String[] args) {
            Animal animal = new Animal() {
    
                @Override
                void eat() {
                    System.out.println("匿名内部类");
                }
            };
            animal.eat();
        }
    }

    匿名内部类
    1 没有名称,看不到类的定义
    2 要求所有的匿名内部类必须实现一个接口或者继承一个类
    3 当我们所在方法的形参需要在内部类中使用时!那么这个参数必须要用final修饰(在jdk1.8中则不用添加(final))

  • 相关阅读:
    【2019】微软Power BI 每月功能更新系列——Power BI 10月版本功能完整解读
    教你写一个含信息的汇编程序
    为安卓手机刷上手机kali系统Nethunter
    多年珍藏的55w御剑字典
    netsh命令获取wifi历史连接密码
    win7/10获取本地wifi密码明文
    Wordpress综合检测和爆破工具
    那些年我们一起追逐过的安全工具
    大部分政府网站U-mail存在直接拿shell漏洞
    无需密码攻击 Microsoft SQL Server
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/8728646.html
Copyright © 2011-2022 走看看