IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java实例内部类 -> 正文阅读

[Java知识库]java实例内部类

内部类:可以将一个类定义在另一个类或者一个方法的内部。描述一个事物的一个完整结构的描述。内部类包括:实例内部类(普通内部类),静态内部类,局部内部类(定义在方法里,几乎不用)和匿名内部类。本文针对实例内部类进行介绍。
1.对于内部类来说,和普通的成员变量是同一等级的,也依赖于对象。所以,需要外部类对象的引用才能进行内部类的实例化。
2.如何实例化内部类对象:
代码中提供了两个方法

    OutClass out = new OutClass();
    OutClass.InnerClass inner1= out.new InnerClass();

②一步到位

   OutClass.InnerClass inner2 = new OutClass().new InnerClass();

总的来说,就是定义方法:
外部类名.内部类名 变量 = 外部类对象的引用.new 内部类()
3.实例内部类中能定义静态成员变量吗?
不能,但可以通过加final关键字把它变成常量,定义必须要是编译的时候就确定的值,也就是说必须时static final的。定义时也要进行初始化。

public static final int data6 = 60;

4.实例内部类当中,有成员变量名和外部类的成员变量名冲突了怎么办
优先使用自己的
那么如何拿到外部类的呢?

       System.out.println("外部类的data1:"+OutClass.this.data1);
       System.out.println("内部类的data1:"+this.data1);

可以得出结论:实例内部类不仅包含了自己的this,也包含了外部类的this
5.如何在外部类中访问实例内部类的成员变量和成员方法呢?

public void funcOut(){
        InnerClass in = new InnerClass();
        System.out.println(in.data5);
        in.func2();
        System.out.println("外部类的普通成员方法");
    }

通过实例化内部类对象,用.操作符去访问
6.实例内部类能拿到外部类的成员变量吗?

public void func(){
            System.out.println(data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }

可以看到,不仅可以访问public权限的,也能访问private权限的,静态的也能访问。
7.实例内部类中可以有静态成员方法吗?
不行!无法通过编译。
在这里插入图片描述
8.实例内部类字节码文件说明
在这里插入图片描述
外部类$内部类。
所以当用到实例内部类时,加载实例内部类的字节码文件,不用时不加载。
其次,内部类和外部类共用一个java源文件,经过编译之后,内部类会形成单独的字节码文件。

总结:

1.外部类的任何成员都可以直接在实例内部类方法中访问。
2.实例内部类所处的位置与外部类成员的位置相同,所以受public、private等访问限定符的约束
3.在实例内部类方法中访问同名的方法时,优先访问自己的。如果要访问外部类的同名的成员,使用外部类名.this.同名成员方式访问。
4.实例内部类对象必须先有外部类对象才能创建
5.实例内部类的非静态方法中包含了一个指向外部类对象的引用(即this)。
6.外部类中,不能直接访问内部类成员,如果要访问,必须先创建内部类对象

## 整体代码

class OutClass{
    public int data1 = 10;
    private int data2 = 20;
    public static int data3 = 30;
    /**
    * @Description:实例内部类
    */
    class InnerClass{
        public int data4 = 40;
        private int data5 = 50;
        public static final int data6 = 60;
        public int data1 = 88;
        public InnerClass(){
            System.out.println("实例内部类的构造方法");
        }
        public void func(){
            System.out.println(data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
            System.out.println("外部类的data1:"+OutClass.this.data1);
            System.out.println("内部类的data1:"+this.data1);
            System.out.println("实例内部类的普通成员方法");
        }
        public void func2(){
            System.out.println("实例内部类的普通成员方法");
        }
    }

    public void funcOut(){
        InnerClass in = new InnerClass();
        System.out.println(in.data5);
        in.func2();
        System.out.println("外部类的普通成员方法");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        OutClass out = new OutClass();
        OutClass.InnerClass inner1= out.new InnerClass();

        OutClass.InnerClass inner2 = new OutClass().new InnerClass();
        System.out.println("_________________");
        out.funcOut();
    }
}

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:09:53  更:2022-04-09 18:11:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:47:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码