Java面向对象之内部类案例讲解

 更新时间:2021年08月05日 09:11:11   作者:Z && Y  
这篇文章主要介绍了Java面向对象之内部类案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

1. 内部类

很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了

1.1 内部类概述

  • 内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。
  • 内部类不是在一个java源文件中编写俩个平行的俩个类,而是在一个类的内部再定义另外一个类。 我可以把外边的类称为外部类,在其内部编写的类称为内部类。
  • 内部类分为四种:
    • 成员内部类
    • 静态内部类
    • 局部内部类
    • 匿名内部类

1.2 成员内部类(实例内部类、非静态内部类)

注:成员内部类中不能写静态属性和方法


1.2.1 【定义一个内部类】

//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类
public class Outer {
    private int id;

    class Inner {
        public void in() {
            System.out.println("这是内部类方法");
        }
    }

    public void out() {
        System.out.println("这是外部类方法");
    }
}

1.2.2【实例化内部类】

实例化内部类,首先需要实例化外部类,通过外部类去调用内部类

// 代码接上
class Test {
    public static void main(String[] args) {
        //实例化成员内部类分两步
        //1、实例化外部类
        Outer outObject = new Outer();
        //2、通过外部类调用内部类
        Outer.Inner inObject = outObject.new Inner();
        //测试,调用内部类中的方法
        inObject.in();//打印:这是内部类方法
    }
}

在这里插入图片描述

分析:
想想如果你要使用一个类中方法或者属性,你就必须要先有该类的一个对象,同理,一个类在另一个类的内部,那么想要使用这个内部类,就必须先要有外部类的一个实例对象,然后在通过该对象去使用内部类。


1.2.3 【成员内部类能干什么?】

访问外部类的所有属性(这里的属性包括私有的成员变量,方法)
//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类
public class Outer {
    private String id = "11923020124";

    class Inner {
        public void in() {
            System.out.println("这是内部类方法");
        }

        //内部类访问外部类私有的成员变量
        public void getId() {
            System.out.println("id: " + id);
        }

        public void useOut() {
            out();
        }
    }

    public void out() {
        System.out.println("这是外部类方法");
    }
}

class Test {


    public static void main(String[] args) {
        //实例化成员内部类分两步
        //1、实例化外部类
        Outer outObject = new Outer();
        //2、通过外部类调用内部类
        Outer.Inner inObject = outObject.new Inner();
        //测试,调用内部类中的方法
        inObject.in();//打印:这是内部类方法
        inObject.getId();
        inObject.useOut();
    }
}

在这里插入图片描述

如果内部类中的变量名和外部类的成员变量名一样,要通过创建外部类对象 "."属性来访问外部类属性,通过this.属性访问内部类成员属性

//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类
public class Outer {
    private String id = "Outer Id";

    class Inner {
        private String id = "Inner Id"; //这个id跟外部类的属性id名称一样。

        public void getInnerId() {
            System.out.println(id);//输出Inner Id,内部类中的变量会暂时将外部类的成员变量给隐藏
        }

        public void getOuterId() {
            System.out.println(Outer.this.id);//输出Outer Id,内部类中的变量会暂时将外部类的成员变量给隐藏
        }
    }

    public void out() {
        System.out.println("这是外部类方法");
    }
}

class Test {
    public static void main(String[] args) {
        //实例化成员内部类分两步
        //1、实例化外部类
        Outer outObject = new Outer();
        //2、通过外部类调用内部类
        Outer.Inner inObject = outObject.new Inner();
        //测试,调用内部类中的方法
        inObject.getInnerId();
        inObject.getOuterId();
    }
}

在这里插入图片描述

说明:

如何调用外部类的成员变量呢?通过Outer.this,因为如果想实例化内部类对象,就必须通过外部类对象,当外部类对象new出内部类对象时,会把自己(外部类对象)的引用传到了内部类中,所以内部类就可以通过Outer.this来访问外部类的属性和方法,到这里,你也就可以知道为什么内部类可以访问外部类 的属性和方法,这里由于有两个相同的属性名称,所以需要显示的用Outer.this来调用外部类的属性,平常如果属性名 不重复,那么我们在内部类中调用外部类的属性和方法时,前面就隐式的调用了Outer.this。


1.2.4 借助成员内部类,来总结内部类(包括4种内部类)的通用用法:

  • 要想访问内部类中的内容,必须通过外部类对象来实例化内部类。
  • 能够访问外部类所有的属性和方法,原理就是在通过外部类对象实例化内部类对象时,外部类对象把自己的引用传进了内部类,使内部类可以用通过Outer.this去调用外部类的属性和方法,一般都是隐式调用了,但是当内部类中有属性或者方法名和外部类中的属性或方法名相同的时候,就需要通过显式调用Outer.this了。

到此这篇关于Java面向对象之内部类案例讲解的文章就介绍到这了,更多相关Java面向对象之内部类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java开发就业信息管理系统

    java开发就业信息管理系统

    这篇文章主要为大家详细介绍了java开发就业信息管理平台,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Java 判断字符串a和b是否互为旋转词

    Java 判断字符串a和b是否互为旋转词

    本篇文章主要介绍了判断字符串a和b是否互为旋转词的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • spring*.xml配置文件明文加密的实现

    spring*.xml配置文件明文加密的实现

    这篇文章主要介绍了spring*.xml配置文件明文加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java实现常见的排序算法的示例代码

    Java实现常见的排序算法的示例代码

    这篇文章主要为大家详细介绍了Java实现常见的排序算法(选择排序、插入排序、希尔排序等)的相关资料,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-10-10
  • 用SpringBoot+Vue+uniapp小程序实现在线房屋装修管理系统

    用SpringBoot+Vue+uniapp小程序实现在线房屋装修管理系统

    这篇文章主要介绍了用SpringBoot+Vue+uniapp实现在线房屋装修管理系统,针对装修样板信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题开发了这套系统,需要的朋友可以参考下
    2023-03-03
  • 解决报java.lang.AssertionError错误的问题

    解决报java.lang.AssertionError错误的问题

    这篇文章主要介绍了解决报java.lang.AssertionError错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • java数据结构基础:算法

    java数据结构基础:算法

    这篇文章主要介绍了Java的数据解构基础,希望对广大的程序爱好者有所帮助,同时祝大家有一个好成绩,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • Java 多用户登录限制的实现方法

    Java 多用户登录限制的实现方法

    最近没有事情做,闲的发呆,于是写个东东练练手。这篇文章主要介绍了Java 多用户登录限制的实现方法的相关资料,需要的朋友可以参考下
    2016-11-11
  • Java(springboot) 读取txt文本内容代码实例

    Java(springboot) 读取txt文本内容代码实例

    这篇文章主要介绍了Java(springboot) 读取txt文本内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • javaGUI实现多人聊天功能

    javaGUI实现多人聊天功能

    这篇文章主要为大家详细介绍了javaGUI实现多人聊天功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论