内部类

Posted crabdumplings

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类相关的知识,希望对你有一定的参考价值。

内部类

Java允许将一个类A声明在另一个类B中,则类A为内部类,类B为外部类

分类

成员内部类(静态或非静态)

作为外部类的成员,调用外部类的结构

  1. 可以被static修饰
  2. 可以被四种不同权限修饰
  3. 作为类
    • 类内可以定义属性、方法、构造器等
    • 可以被final修饰,表示此类不能被继承(不使用final可以被继承)
    • 可以被abstract修饰,表示该类不能被实例化

局部内部类

  • 在方法内、代码块内、构造器内
  • 在局部内部类的方法中,如果调用局部内部类所在的声明方法中局部变量,要求此局部变量声明为final

代码实现

使用内部类

public class Test {
    public static void main(String[] args) {
        //静态成员内部类
        Person.Sing s = new Person.Sing();
        s.name = "殷志源";
        s.show();
        System.out.println("----------------");
        //非静态成员内部类
        Person p = new Person();
        Person.Walk w = p.new Walk();
        w.nickname = "丸子";
        w.show();
        //局部内部类
        System.out.println("-------------");
        p.eat();
    }
}

class Person{

    static class Sing{
        String name;

        public void show(){
            System.out.println("静态成员内部类");
            System.out.println(name + "在唱歌");
        }
    }

    class Walk{
        String nickname;

        public void show(){
            System.out.println("非静态成员内部类");
            System.out.println(nickname + "在走路");
        }
    }

    public void eat(){
        String foodname = "南煎丸子";

        class Play{
            final String gameName = "消灭星星";
            public void show(){
                System.out.println("局部内部类");
                System.out.println("在玩的游戏名字" + gameName);
            }
        }

        Play p = new Play();
        String gameName = p.gameName;
        p.show();
        System.out.println("喜欢的食物名字是" + foodname);

    }
}

运行结果

技术图片

使用

实例化成员内部类的对象

  1. 创建静态成员内部类
    技术图片
  2. 创建非静态成员内部类
    技术图片

在成员内部类中区分调用外部类的结构

技术图片



以上是关于内部类的主要内容,如果未能解决你的问题,请参考以下文章

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

为啥片段类应该是公开的?

ForegroundService没有从片段开始?

在内部片段类中使用ListView

自定义无内存泄漏的Handler内部类

底部导航 如何从片段内部更改片段