zoukankan      html  css  js  c++  java
  • Java基础00-内部类23

    1. 内部类

    内部类

    1.1 内部类概述

    代码示例:

    1.2 成员内部类

    代码示例:

    创建一个成员内部类:
    定义时没有小括号是因为类是没有形参的。
    在类的成员位置,就是成员内部类了

    创建测试类:
    这里发现不可以直接创建成员内部类的实例对象,因为Inner是在内的内部。

    所以要这样创建内部类:Outer.Inner = new Outer().Inner();

    运行结果:
    外部类的num是10

    注意:
    我们将成员内部类定义到的那个位置,一般来说就是不想让外界去访问它,所以上面的写法是不常见的,
    一般都使用这样的写法,将public改为private,变为私有的,这样外界就访问不到它了。

    测试类中以前的格式也就失效了

    虽然在外界是访问不到成员内部类的,但是在类中还是能访问到的。
    所以我们想要访问私有的成员内部类可以通过间接的方式访问。
    访问Outer中的method方法就可以访问到私有的成员内部类了。

    修改参数类:

    运行:

    1.3 局部内部类

    代码示例:

    局部内部类和局部变量的位置是一样的,写在成员方法中的。

    在测试类中调用method就可以间接的使用局部内部类了

    运行结果:

    同时也可以在局部内部类中方法局部变量

    1.4 匿名内部类

    代码示例:

    创建一个接口让匿名内部类实现:

    在Outer类中写一个Inter接口的匿名内部类

    在测试类中执行:

    运行结果:
    运行结果为空,向下看

    怎么调用show方法那?
    还是要看匿名内部类的本质:本质是一个继承了该类或者实现了该接口的子类匿名对象,
    既然它是一个对象,那么是对象就能调用方法,直接在匿名子类对象的末尾点对象即可。

    然后继续在测试类中执行:
    这次可以执行show方法了

    还有另外一种写法:
    因为匿名内部类的本质就是一个没有名字的实现类或子类,所以它也可以通过多态赋值给它的父类或接口类,
    这里我们用的是接口和实现类的实例,
    接口 对象名 = 匿名内部类,然后用对象名调用方法
    Inter i = new Inter(){…},这样写也是可以的,这样调用多次匿名内部类的时候就不会很麻烦了。

    运行结果:

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

    一个接口两个方法

    public class JumppingsDemo {
        public static void main(String[] args) {
            JumppingsOperator j = new JumppingsOperator();
            j.method(new Jumpping() {
                public void jump() {
                    System.out.println("abc");
                }
            });
        }
    }

    1. 创建一个跳高接口

    2. 创建一个操作类

    3. 创建一个测试类

    4. 按照测试类的需求,创建接口操作类的对象,调用method方法
    这里提示我们要的是Jumpping类型的实参,
    但是Jumpping是一个接口,所以其实要的是Jumpping的实现类。

    5. 创建一个Jumpping的实现类Cat

    6. 继续在测试类中添加
    利用多态将Jumpping的子类Cat传入method方法中。

    运行实现:

    假如还有好多动物它们都是只用jump方法一次,那么就要创建好多个类和创建好多个对象。
    如果采用匿名内部类会是什么样的那?往下看
    method其实要的是method的实现类,
    而匿名内部类就是一个没有名字的实现类或子类,
    那么可以怎么操作?

    完全可以在jo.method(),中直接放入一个匿名内部类,然后实现接口的方法。

    接着运行测试类:
    完全可以达到和以前一样的效果,而且还可以不用创建类。

    总结:如果一个类在整个操作中,只使用一次的话,就可以将其定义成匿名内部类。

  • 相关阅读:
    AMH4.2 Ftp账号路径修改设置
    过狗一句话
    破解tumblr背景音乐
    lnmp下安装ffmpeg和ffmpeg-php教程
    How To install FFMPEG, FLVTOOL2, MP4Box on CentOS server 2015 easy method
    自己的路删除
    弹出CPA
    JSON的相关知识
    JavaScript函数的相关知识
    JavaScript对象的相关知识
  • 原文地址:https://www.cnblogs.com/ajing2018/p/14669008.html
Copyright © 2011-2022 走看看