Java 内部类

这篇具有很好参考价值的文章主要介绍了Java 内部类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是内部类及为何要有内部类

二、四种内部类

 1.成员内部类 

 成员内部类定义:

获取成员内部类对象的方法:

成员内部类获取外部类变量:

 额外:

2.局部内部类

局部内部类定义:

如何实现内部类当中的方法:

3.静态内部类 

静态内部类定义

 获取静态内部类对象的方法:

静态内部类获取外部变量:

调用静态内部类方法:

4.匿名内部类


一、什么是内部类及为何要有内部类

内部类是指在一个类的内部定义的另一个类。它可以访问外部类的成员,并且可以被外部类的成员访问。

内部类有以下好处:

  1. 封装性:内部类可以访问外部类的私有成员,这样可以增强了封装性,外部类的私有成员不需要暴露给外部类以外的类,可以被内部类私有化访问。

  2. 实现多继承:内部类在Java中类似于C++中的多重继承。一个类可以有多个内部类,每个内部类可以继承自不同的类或实现不同的接口,从而实现多继承的效果。

  3. 隐藏实现细节:内部类可以对实现细节进行隐藏,外部类无法直接访问内部类的方法和属性,只能通过外部类对象来访问。

  4. 回调机制:通过内部类可以实现回调机制,内部类可以访问外部类的方法和成员,可以在内部类中引用外部类对象的方法,实现回调功能。

  5. 方便访问外部类的成员:外部类可以访问内部类的私有成员,这使得外部类可以很方便地访问内部类的属性和方法,而不需要通过公共的接口或方法。

  6. 高级别的封装和模块化:内部类可以将一些逻辑相关的代码集中在一起,使得外部类更加简洁和模块化。内部类可以隐藏在外部类中,只在需要的时候才暴露给外部程序。 

二、四种内部类

 1.成员内部类 

 成员内部类定义:


成员内部类是定义在一个类的内部,并直接于类的成员位置,相当于该内部类与外部类当中的成员变量和成员方法处于同等地位。它可以访问外部类的所有成员,包括私有成员。成员内部类的定义格式为:外部类.内部类 内部类对象 = 外部类对象.new 内部类()。

public class OuterClass {
    private int num;

    public class InnerClass {
        public void display() {
            System.out.println("num:" + num);
        }
    }
}
获取成员内部类对象的方法:
OuterClass outerObj = new OuterClass();  // 创建外部类对象
OuterClass.InnerClass innerObj = outerObj.new InnerClass();  // 创建成员内部类对象

//或者
 
OuterClass.InnerClass oi = new outerObj().new InnerClass();

请注意:如果成员内部类被私有(private)或受保护(protected)修饰,外部类是无法直接访问和创建成员内部类的对象的。

但仍然有几种方式可以获取成员内部类的对象: 

在外部类中提供一个公共的方法来获取成员内部类的对象。在该公共方法中,可以通过创建内部类对象并返回它来实现获取成员内部类的对象。

public class OuterClass {
    private class InnerClass {
        // ...
    }
  
    private InnerClass createInnerInstance() {
        return new InnerClass();
    }
  
    public void outerMethod() {
        InnerClass innerObj = createInnerInstance();
        // 使用 innerObj 进行操作
    }
}
成员内部类获取外部类变量:

成员内部类可以直接调用外部类的变量,但是如果成员内部类当中存在与外部类重名的变量可以参考如下代码:

public class OuterClass {
    private int outerVariable = 10;

    public class InnerClass {
        private int outerVariable = 20;

        public void printOuterVariable() {
            System.out.println("Inner variable: " + outerVariable);
            System.out.println("Outer variable: " + OuterClass.this.outerVariable);
        }
    }
}
 额外:

在JDK 16以前 是不能在成员内部类里面定影一个静态的变量的

2.局部内部类

局部内部类定义:

局部内部类地位处于外部类的局部位置,与外部类的局部变量处于同等地位。局部内部类是定义在一个方法或作用域内部的类。它只能在所在的方法或作用域内被访问,无法从外部进行访问。局部内部类的定义格式为:在方法或作用域内定义的类。 

public class OuterClass {
    public void display() {
        class LocalInnerClass {
            public void print() {
                System.out.println("局部内部类");
            }
        }
      
        LocalInnerClass innerObj = new LocalInnerClass();
        innerObj.print();
    }
}

 局部内部类的对象只能在所在方法或作用域内创建和使用,无法在外部进行访问。

局部内部类的作用范围在定义它的代码块内部,对外部类的其他方法和代码块都是不可见的

该类可直接访问外部类的成员和方法内的局部变量 

如何实现内部类当中的方法:

在测试类当中 获取外部类的对象,用该对象来调用包含局部内部类的成员方法 

3.静态内部类 

静态内部类定义

静态内部类是定义在一个类的内部,且被static修饰的类。静态内部类属于成员内部类的一种,静态内部类独立于外部类的对象存在,可以直接通过外部类访问,即外部类.静态内部类。

public class OuterClass {
    private static int num;

    public static class StaticInnerClass {
        public void display() {
            System.out.println("静态内部类,num:" + num);
        }
    }
  
}
 获取静态内部类对象的方法:
OuterClass.StaticInnerClass innerObj = new OuterClass.StaticInnerClass();  // 创建静态内部类对象
静态内部类获取外部变量:

静态内部类可以访问外部类的静态成员和非静态成员。如果需要访问外部类的非静态成员,需要通过创建外部类的对象来访问:

OuterClass outerObj = new OuterClass();
outerObj.nonStaticMethod(); // 访问外部类的非静态方法
调用静态内部类方法:

1.非静态方法:需先创建内部类的对象

2.静态方法 :直接Outer.Inner.method();即可

4.匿名内部类

匿名内部类是一种没有命名的内部类,它通常用于创建接口、抽象类的非静态对象。匿名内部类没有构造方法,通过实例初始化块来实现特定的初始化操作。

格式:

Java 内部类,java,开发语言

interface MyInterface { //接口
    public abstract void display();//抽象方法
}

new MyInterface (){
@Override
 public void display(){
//重写该方法
 }
};

匿名内部类会直接实现接口或继承抽象类,并重写方法。创建匿名内部类的同时创建了该类的对象。旨在完成一些简单或者一次性操作的时候不需要创建一些类文章来源地址https://www.toymoban.com/news/detail-699780.html

到了这里,关于Java 内部类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java成员类(内部类、匿名内部类)

    Java 中内部类指的是声明在一个类内部的类,它可以访问外部类的私有变量和方法,而外部类不能直接访问内部类的成员。内部类的主要作用是为外部类提供一种封装和组织代码的方式。 内部类可以解决Java类单继承的问题,因为内部类和外部类可以相互访问。 成员内部类(

    2024年02月11日
    浏览(37)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(53)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(66)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(60)
  • Java转Go:java开发者转学go语言,请给我一些建议和学习推荐

    在做开发时遇到最无理的需求就是部门没了😂 遇到最无理的需求就是部门没了😂,差点人也在这个公司没了,但好在是跟着大部队换了一个部门,就是要转go,也可能要用js和solidity开发 一开始知道部门没了,第一时间一定是会担心,甚至后面知道有的同事要被毕业,有的同

    2024年02月13日
    浏览(51)
  • Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

    字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。 内部类是类的第五大成员→【提示:类的五大成员是哪些?[属性、方法、构造器、代码块、内部类]】 内部类一

    2024年04月24日
    浏览(34)
  • 【Java基础】匿名内部类

    🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🎁什么是匿名内部类 🎁为什么要使用匿名内部类 🎁详细解释 🏳️‍🌈不使用匿名内部类 🏳️‍🌈使

    2024年02月05日
    浏览(45)
  • java中的内部类

    第一类:定义在外部类局部位置上,分为局部内部类( 有 类名)、匿名内部类(没有类名)。 第二类:定义在外部类的成员位置上,分为成员内部类(没有static修饰)、静态内部类(使用static修饰)。 局部内部类是定义在外部类的局部位置,比如方法中,并且有类名。 局部内部类的

    2023年04月15日
    浏览(29)
  • Java基础-内部类

    内部类指的是在一个类的内部定义的类,Java 中存在四种内部类,分别是成员内部类、局部内部类、静态内部类和匿名内部类。 成员内部类在类文件中与成员变量和成员方法并列,作为类的成员存在。 成员内部类可以访问外部类的所有成员,成员内部类不可以定义静态成员。

    2024年02月16日
    浏览(27)
  • 【Java|基础篇】内部类

    内部类就是在一个类中再定义一个类,内部类也是封装的体现.它可以被声明为 public、protected、private 或默认访问控制符 。内部类可以访问外部类的所有成员变量和方法,包括私有成员。内部类可以用来实现一些特殊的功能,比如实现回调函数、事件处理等。常见的内部类包括

    2024年02月08日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包