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

    内部类

    1.1内部类的概述

    内部类:就是在一个类中定义一个类。举例:在一个类A的内部类定义一个类B,类B就被称为内部类

     

    内部类的定义格式

    • 格式:

    • 范例:

    内部类的访问特点:

    • 内部类可以直接访问外部类的成员,包括私有

    • 外部类要访问内部类的成员,必须创建对象

    public class Outer {
    ​
        private int num = 10;
    ​
        public class Inner{
            public void show(){
                System.out.println(num);
            }
        }
    ​
        public void method(){
            Inner i = new Inner();
            i.show();
        }
    ​
    }

    1.2 成员内部类

    按照内部类在类中定义的位置不同,可以分为如下两种方式

    • 在类的成员位置:成员内部类

    • 在类的局部位置:局部内部类

    成员内部类,外界如何创建对象使用?

    • 格式:外部对象名.内部对象名 对象名 = 外部对象.内部类对象;

    • 范例:Outer.Inner or = new Outer().new Inner();

    内部类

    public class Outer {
    ​
        private int num = 10;
    ​
        /*public class Inner{
            public void show(){
                System.out.println(num);
            }
        }*/
        private class Inner{
            public void show(){
                System.out.println(num);
            }
        }
    ​
        public void method(){
            Inner i = new Inner();
            i.show();
        }
    ​
    }

    测试类

    public class InnerDemo {
        public static void main(String[] args) {
            //创建内部类对象,并调用方法
            /*Outer.Inner or = new Outer().new Inner();
            or.show();*/
            Outer or = new Outer();
            or.method();
    ​
        }
    }

    1.3局部内部类

    局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用

    该类可以直接访问外部类的成员。也可以访问方法内的局部变量

     

    局部内部类

    public class Outer {
    ​
        private int num = 10;
    ​
        public void method(){
            int num2 = 20;
            class Inner{
                public void show(){
                    System.out.println(num);
                    System.out.println(num2);
                }
            }
            Inner i = new Inner();
            i.show();
        }
    }

    测试类

    public class OuterDemo {
        public static void main(String[] args) {
            Outer or = new Outer();
            or.method();
        }
    }

    1.4 匿名内部类

    前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类

    • 格式:

    • 范例:

    本质:是一个继承了该类或者实现了该接口的子类匿名对象

    接口类

    public interface Inter {
    ​
        void show();
    ​
    }

    内部类

    public class Outer {
        public void method(){
    ​
            /*new Inter(){
                @Override
                public void show() {
                    System.out.println("匿名内部类");
                }
    ​
            };*/
            /*
            单次调用
             */
            /*new Inter(){
                @Override
                public void show() {
                    System.out.println("匿名内部类");
                }
    ​
            }.show();*/
            Inter i = new Inter(){
                @Override
                public void show() {
                    System.out.println("匿名内部类");
                }
    ​
            };
            i.show();
            i.show();
            i.show();
        }
    }

    测试类

    public class OuterDemo {
        public static void main(String[] args) {
            Outer or = new Outer();
            or.method();
        }
    }

    1.5 匿名内部类在开发中的使用

     

     

    接口

    public interface Jumpping {
    ​
        void jump();
    ​
    }

    接口实现类

    public class Cat implements Jumpping {
    ​
        @Override
        public void jump() {
            System.out.println("猫可以跳高了 ");
        }
    }

    接口操作类

    public class JumppingOperator {
        public void method(Jumpping j){
            j.jump();
        }
    }

    测试类

    public class JumppingDemo {
        public static void main(String[] args) {
            //需求,创建接口操作类的对象,调用method方法
            JumppingOperator jo = new JumppingOperator();
            Jumpping j = new Cat();
            jo.method(j);
            //如果多了,而且只用一次,每次都创建过于麻烦
            jo.method(new Jumpping() {
                @Override
                public void jump() {
                    System.out.println("小狗也可以跳高了");
                }
            });
        }
    }

     

  • 相关阅读:
    ryu 下发流表配置
    openstack kolla 部署---不同的节点采用不同的物理接口
    kolla 安装
    Ubuntu add-apt-repository: command not found
    大前端发展趋势
    这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
    asap异步执行实现原理
    为什么 JS 对象内部属性遍历的顺序乱了
    你可能忽略的 async/await 问题
    深入浅出JS原型链
  • 原文地址:https://www.cnblogs.com/DiaoStudy/p/13629615.html
Copyright © 2011-2022 走看看