JAVA入门之内部类 笔记(29)

导读:本篇文章讲解 JAVA入门之内部类 笔记(29),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、内部类概论

内部类:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
在这里插入图片描述

二、内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

下面展示一些 内联代码片

package TEXT;

public class Outer {
    //外部类私有变量
    private int num = 20;

    //外部类方法
    public void outShow(){
        System.out.println("外部类show方法");
    }

    //内部类
    public class Inner{
        public void inShow(){
            System.out.println("内部类show方法");
            System.out.println("num = " + num);
        }
    }
}

package TEXT;

public class Demo {
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();
        oi.inShow();
    }
}

在这里插入图片描述

三、成员内部类

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

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

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

  • 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
  • 范例:Outer.Inner oi = new Outer( ).new Inner;

像上面代码这样把内部类定义成public是不常见的,一般都弄成私有的,因此应该如下修改

package TEXT;

public class Outer {
    //外部类私有变量
    private int num = 20;

    //内部类
    private class Inner{
        public void inShow(){
            System.out.println("内部类show方法");
            System.out.println("num = " + num);
        }
    }

    public void show(){
        Inner i = new Inner();
        i.inShow();
    }
}
package TEXT;

public class Demo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.show();
    }
}

四、局部内部类

  1. 局部内部类就是在方法中定义的类,所以外部是无法直接使用的,需要在方法内部创建对象并使用
  2. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量
package TEXT;

public class Outer {
    //外部类私有变量
    private int num = 20;

    public void show(){
        //局部内部类
        class Inner{
            public void inshow(){
                System.out.println("内部类show");
                System.out.println("num = " + num);
            }
        }

        //调用具备内部类
        Inner i = new Inner();
        i.inshow();
    }
}

package TEXT;

public class Demo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.show();
    }
}

五、匿名内部类

前提:存在一个类或者接口,这里的类可以是具体也可以是抽象类
本质:是一个继承了该类或者实现了该类接口的子类匿名对象

在这里插入图片描述

package TEXT;

public class Outer {
    public void show(){
        //调用匿名内部类中show方法的方法如下

/*        //一、该本质是一个对象,因此可以直接.show
        new Inter(){
            @Override
            public void show() {
                System.out.println("show方法");
            }
        }.show();*/

        //二、创建一个对象
        Inter i = new Inter(){
            @Override
            public void show() {
                System.out.println("show方法");
            }
        };

        i.show();
    }
}

package TEXT;
/*
    接口
 */
public interface Inter {
    void show();
}

package TEXT;
/*
    测试类
 */
public class Demo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.show();
    }
}

六、匿名内部类的应用

在开发中我们难免会用一些只用一次的对象,如果这些对象我们只用一次但却把他们创建成JAVA类,再在测试类中生成该对象,这会是个不太明智的选择,但是当我们应用匿名内部类,就能更好解决这个问题

package TEXT;
/*
    接口
 */
public interface Jumpping {
    void jump();
}

package TEXT;

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

package TEXT;
/*
    测试类
 */
public class Demo {
    public static void main(String[] args) {
        JumppingOperator jo = new JumppingOperator();

        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("猫可以跳高了");
            }
        });

        JumppingOperator jo2 = new JumppingOperator();
        jo2.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("狗可以跳高了");
            }
        });
    }
}

可见,如果我们没有使用匿名内部类的话,我们就要分别创建一个猫对象和一个狗对象,在后期维护中会发现,这些只用一次的对象会严重浪费内存,因此像这种情况下我们优先考虑使用匿名内部类

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95043.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!