当前位置: 首页 > article >正文

10、Java继承与多态 - 内部内的概念与分类

10、Java继承与多态 - 内部内的概念与分类

什么是内部类?

        如果一个事物的内部包含另一个事物,那么这就是一个内部包含另一个类,称作内部类;

        例如:身体和心脏的关系,又如 -> 汽车和发动机的关系;只有在里边才能正常工作,叫做内部类,心脏只有在身体中才能工作吧,发动机也是一个道理;

而我们的内部类大致上分为两种 ->

        - 成员内部类

        - 局部内部类(包含匿名内部类)

成员内部类的定义格式,如下所示 ->

修饰符 class 外部类名称 {

        修饰符 class 内部类名称 {

                ......

        }

        ......

}

使用内部类时注意:内用外,随意访问;外用内,需要内部类对象; 

如何使用成员内部中的方法呢?有两种方式:

        1. 间接方式:在外部类的方法中调用内部类的方法;然后我们调用外部类的方法即可;

        2. 直接方式:通过创建内部类的对象去直接访问内部类的方法,创建方式 - 如下所示->

外部类名称.内部类名称  对象名  =  new  外部类名称( ).new 内部类名称( ); 

下面用代码,给大家演示一下 ->

创建一个 Body 类 和一个 Heart 内部类,如下所示 ->

public class Body {
    private String name;
    public void running() {
        System.out.println("跑步中......");
        Heart heart = new Heart(); //外部类不能随意访问内部类,需要创建内部类对象才能访问
        heart.jump();
    }
    public class Heart {
        public void jump() {
            System.out.println("我叫:" + name); //内部类可随意访问外部类中的属性
            System.out.println("心脏跳动-蹦蹦蹦......");
        }
    }
}

创建一个 Main.java 文件,如下所示 ->

public class Main {
    public static void main(String[] args) {
        //1.调用 running() 方法间接调用内部类 Heart 中的 jump() 方法 ->
        Body body = new Body();
        body.running();
        //2.创建内部类对象 -> 直接调用内部类 Heart 中的 jump() 方法 ->
        Body.Heart bh = new Body().new Heart();
        bh.jump();
    }
}

        在 main() 方法中,我们首先通过 Body 对象去调用 running() 方法,然后间接通过 running() 方法去访问内部类中的 jump() 方法 —— 这是间接访问;

        然后我们通过创建内部类 Heart 的对象 bh 可以直接访问到内部类中的属性 —— 这是直接访问; 

那么在内部类中如何区分 - 同名的 - 外部类成员变量内部类成员变量内部类局部变量呢 

下面用代码给大家演示一下:

创建一个 Outer 类 ,并在其内部创建一个 内部类 Inner ,如下代码所示 ->

public class Outer {
    int num = 30;
    public class Inner {
        int num = 20;
        public void InnerMethod() {
            int num = 10;
            System.out.println(num);// num = 10
            System.out.println(this.num);// num = 20
            System.out.println(Outer.this.num);// num = 30
        }
    }
}

        调用内部类 Inner 中的 InnerMethod( ) 方法输出的结果自然是10 20 30 ;

        这里要注意的是如果我们要在内部类中调用外部类的同名成员变量时,要在 this 关键字前加上外部类的名称;


http://www.kler.cn/a/15472.html

相关文章:

  • Oracle 单机及 RAC 环境 归档模式及路径修改
  • Go语言24小时极速学习教程(二)复合数据(集合)操作
  • PG-DERN 解读:少样本学习、 双视角编码器、 关系图学习网络
  • Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理
  • 基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • hw xm 的额外symbol汇总
  • 为什么要用虚拟 DOM?
  • Open3D 最小二乘拟合二维直线
  • 智能合约的分层设计浅谈
  • 可视化CNN和特征图
  • Java 中的异常处理机制是什么?如何使用它来处理程序中的异常?(七)
  • 玩转ChatGPT:Auto-GPT项目部署与测评
  • 机器学习实战教程(十):逻辑回归
  • 手把手带你写一份优秀的开发求职简历(四)
  • 亚科转债,鹿山转债上市价格预测
  • Leetcode力扣秋招刷题路-0853
  • 能上网的ChatGPT,会带来什么改变
  • 【信息安全案例】——身份与访问安全(学习笔记)
  • HashMap为什么数组长度是2的幂
  • 如何真正认识 Linux 系统结构?这篇文章告诉你
  • 【VM服务管家】VM4.x算子SDK开发_3.1 环境配置类
  • ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任
  • Docker consul的容器集群的部署|consul-template部署
  • 【论文阅读】轻量化网络MobileNet-V1
  • IDEA弹出`Lombok requires enabled annotation processing`错误信息