内部类

Posted wurengen

tags:

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

内部类简介

将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。

什么时候使用内部类

在描述事物时,若一个事物内部还包含其他可能包含的事物。

内部类的分类

内部类分为成员内部类与局部内部类。

我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。在内部类中可以直接访问外部类的所有成员。

成员内部类

成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

定义格式

class 外部类 {

修饰符 class 内部类 {

//其他代码

     }

}

访问方式

外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

public static void main(String[] args) {
    //创建内部类对象
    Body.Heart bh = new Body().new Heart();
    //调用内部类中的方法
    bh.jump();
}
技术图片

局部内部类

局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问

定义格式

class 外部类 {

修饰符 返回值类型 方法名(参数) {

class 内部类 {

//其他代码

          }

     }

}

访问方式

在外部类方法中,创建内部类对象,进行访问

定义类
class Party {//外部类,聚会
    public void puffBall(){// 吹气球方法
        class Ball {// 内部类,气球
                   public void puff(){
     System.out.println("气球膨胀了");
      }
}
//创建内部类对象,调用puff方法
new Ball().puff();
     }
}

//访问内部类
public static void main(String[] args) {
    //创建外部类对象
    Party p = new Party();
    //调用外部类中的puffBall方法
    p.puffBall();
}

匿名内部类

匿名内部类的本质是一个带具体实现的父类或者父接口的匿名子类对象。

前提:

匿名内部类必须继承一个父类或者实现一个父接口

格式:

new 父类名或者接口名(){

      //方法重写

}

package day02;

// 抽象类
abstract class Demo {
    //抽象方法
    abstract void fly();


}

// 继承实现了抽象列
class Demo1 extends Demo {
    void fly() {
        System.out.println("我飞了");
    }
}

public class Test {
    public static void main(String[] args) {
        //匿名内部类当做参数传递
        run(new Demo1() {
            void fly() {
                System.out.println("我飞了");
            }

        });


    }

    private static void run(Demo d) {
        d.fly();
    }

}

技术图片

 

技术图片

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

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

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

ForegroundService没有从片段开始?

在内部片段类中使用ListView

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

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