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))

  • 相关阅读:
    从零开始搭建Wpf基础9-使用MaterialDesignToolkit对界面进行美化下
    从零开始搭建Wpf基础8-登录界面成功后显示主窗体
    从零开始搭建Wpf基础7-Api数据接入
    从零开始搭建Wpf基础6-Tab选项卡MVVM实现
    Wpf下dragablz使用Prism8进行导航-3
    从零开始搭建Wpf基础5-无限级菜单MVVM实现
    从零开始搭建Wpf基础篇4-使用Prism进行模块化
    从零开始搭建Wpf初学篇3-界面模块化
    手写es5和es6实现原型继承
    判断类型(通用类型检测方法)和手写深拷贝
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/8728646.html
Copyright © 2011-2022 走看看