Java语言------四种内部类的详细讲解

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

目录

一.内部类的介绍

二.内部类的种类

2.1实例内部类      

2.2.静态内部类

2.3局部内部类

2.4匿名内部类

总结 


 😽个人主页:tq02的博客_CSDN博客-C语言,Java领域博主
 🌈理想目标:努力学习,向Java进发,拼搏一切,找到一份朝九晚五,有假期的工作,让自己的未来不会有遗憾。
 🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注✨
  本章讲解内容:四种内部类
  使用编译器:IDEA

Java语言------四种内部类的详细讲解

一.内部类的介绍

   

  内部类: 一个类定义在 另一个类 的 内部。  

     内部类分为四种实例内部类、静态内部类、局部内部类、匿名内部类。

使用时机:当一个事物的内部,还需要一个完整的结构进行描述时,而这个内部的完整结构又只为外部事物提供服务,这个完整结构最好使用内部类。(通常 数据结构 时会使用)

内部类代码实例: 

public class Person{
       
       class Student{

     }

}
 //Person是外部类
//Student是内部类

 注: 1.定义在class类名外{}花括号外部的其他类,即使是一个文件夹,都不能称为内部类。                                          2.内部类和外部类共用一个Java源文件,但是经过编译之后,内部类会形成单独的字节码文件。        


二.内部类的种类

2.1实例内部类      

代码实例:

public class Person {
    public int data1=10;
    public int data2=20;
    //实例内部类
    class InnerClass{
        public int data1 = 40;

        //public static int data4=60; 无法定义静态成员变量
         public static finally int data4=60  //finally修饰,为常量
        public void textInner(){
            System.out.println("textInner");
            System.out.println(this.data1);   //输出为40;
            System.out.println(Person.this.data1);  //输出为10;
        }
    }
    public static void main(String[] args) {
        //实例化内部类
        Person kk = new Person();
        Person.InnerClass fw = new Person().new InnerClass();
        fw.textInner();    //输出结果为:textInner
        //实例化内部类
        Person.InnerClass fw1 =new Person().new InnerClass();
        fw1.textInner();    //输出结果为:textInner
    }
}

 解析:

  1.定义在类当中,且不被static修饰的内部类。

  2.因为static不依赖于对象,所以无法定义静态成员变量

  3.当需要实例化实例内部类时,语法格式为:

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

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

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

4.当内部类的变量名和外部类的变量名相同时,优先访问自己的,而想调用外部类的成员,调用方法:外部类名.this.同名成员。

5.外部类的任何成员都可以在实例内部类方法中直接访问。


2.2.静态内部类

public class Person2 {
    public int data=10;
    private  int data2=20;

    //静态内部类
    static class InnerClass{
        public int data = 40;

       public static int data3=60; //可定义静态成员变量或者静态方法
        public void textInner(){
            System.out.println("textInner");
            System.out.println(data);   //输出内部类的40
            Person2 kk=new Person2();
            System.out.println(kk.data); //输出外部类的10;
        }
    }
    public static void main(String[] args) {
        //实例化静态内部类
        InnerClass fw1 =new InnerClass() ;
        fw1.textInner();    //输出结果为:textInner
    }
}

 解析 : 

  1.  定义在类当中,被static修饰的内部类
  2. 静态内部类可以直接实例化 不需要依附于外部类,语法格式为 :                                                                                                                            内部类名  变量名=new  内部类();
  3. 不需要依赖于外部类,不能使用外部类的非static成员变量或者方法
  4. 可以声明静态成员也可以声明非静态成员

2.3局部内部类

public class Person3 {
    public int data=10;
    private  int data2=20;

  public void textInner(){
    
    //定义局部内部类
      class InnerClass{
        int data3=20;
     public void methodInner(){
          System.out.println(data3);
        }
     }
     //实例化局部内部类
        InnerClass fw=new.InnerClass();
         fw. methodInner();
}


public static void main(String[] args) {
    //方法体
}

}

   解析:

   1.在方法当中定义的内部类。

    2.只能在该方法体内部使用,其他位置都不能使用。

    3.也不能被访问修饰符public、private等修饰


2.4匿名内部类

interface Shape{
    void draw();
}
public class Text3 {
    public static void main(String[] args) {
            int area=20;
        new Shape(){
        //需要重写内部方法
           public void draw()
           {
               // area=50; 无法修改,一旦修改无法访问了。
               System.out.println("正方形面积:"+area);
           }
        }.draw();  //调用draw();
    }
}

解析:

  1. 匿名内部类与接口有关,匿名一词便可以知道不需要变量名。
  2. 语法格式:  new 接口名() {       

                                    //重写的方法                 

                             }.需要调用的方法;

     3.匿名内部类里使用到外部变量时,不可以在匿名内部类里修改变量值,会停止访问。

总结 

          四种内部类,使用最少的是局部内部类,并且四种内部类有这很大的不同,不同的语法要求,使用限制等等,在数据结构的线性表、栈堆等都需要使用,所以我们得熟练掌握。文章来源地址https://www.toymoban.com/news/detail-424846.html

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

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

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

相关文章

  • 【JAVA语言-第12话】API中的工具类 之 Date,DateFormat,SimpleDateFormat,Calendar类的详细解析

    目录 日期和时间 1.1 Date类 1.1.1 概述 1.1.2 常用方法  1.1.3 案例 1.2 DateFormat类  1.2.1 概述 1.2.2 常用方法 1.3 SimpleDateFormat类 1.3.1 概述 1.3.2 构造方法 1.3.3 模式字符  1.3.4 日期转字符串 1.3.5 字符串转日期 1.4 Calendar类 1.4.1 概述 1.4.2 静态方法 1.4.3 常用成员方法 1.4.4 成员方法中参数

    2024年02月02日
    浏览(24)
  • 【Java入门】final关键字、static关键字、内部类的认识

    前言 : final是Java中的一个修饰符,用于表示某个变量、方法或者类不能被修改。final可以用于修饰类、方法和变量(局部变量,成员变量)。被final所修饰的类不能被继承,被final所修饰的方法不能被重写,被final所修饰的变量,不能被重新赋值 。 static是Java中的一

    2024年02月11日
    浏览(33)
  • 基于C/C++将派生类赋值给基类的详细讲解

    目录 将派生类对象赋值给基类对象 将派生类指针赋值给基类指针

    2024年02月08日
    浏览(43)
  • Java进阶(7)——手动实现LinkedList & 内部node类的实现 & 增删改查的实现 & toString方法 & 源码的初步理解

    1.linkedList的节点,当前,上一个,下一个的思想; 2.根据index找node的方法,根据index确定从头部还是尾部; 3.linkedlist的增删改查的实现,本质是改变节点的信息; 4.递归方法实现自定义链表的toString方法; Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和

    2024年02月11日
    浏览(31)
  • Java之包装类的详细解析

    Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下: 基本类型 对应的包装类(位于java.lang包中) byte

    2024年02月09日
    浏览(24)
  • 使用反射调用类的私有内部类的私有方法

    在进行单元测试时,我们往往需要直接访问某个类的内部类或者某个类的私有方法,此时正常的调用就无能为力了,因此我们可以使用反射进行调用。 类 实现方法 获取类的Class对象 Class class = Class.forName(\\\"类名\\\") 或 Class class = 类实例.getClass() new一个实例 Object object = class.newIn

    2024年02月07日
    浏览(29)
  • 内部类的学习2

    静态内部类 静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。 创建静态内部类对象的格式: 外部类名.内部类名 对象名=new 外部类名.内部类名(); 局部内部类:将内部类定义在方法里面就叫局部内部类,类似于方法里面的局部变量

    2024年01月25日
    浏览(20)
  • 关于内部类的面试题

    一、看下面代码求值 复制 答案:num、this.num、Outer.this.num 解析:这题你如何明白了上面总结中的第二点,那么非常简单,考察的就是1、局部变量 2、this,和3、Outer.this,也就是内部类访问外部类属性方法的原理。这考察三个东西, 1、在一个方法中,使用直接使用变量名,肯定

    2024年02月08日
    浏览(24)
  • 你真的了解四种内部类吗

    作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 实例内部类是嵌套在一个类的 非静态成员位置上的类 ,它可以 访问外部类的实例变量和方法。 以下是一个实例内部类的例子: 以上代码定义了一个

    2024年02月11日
    浏览(21)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包