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

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

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

内部类可以解决Java类单继承的问题,因为内部类和外部类可以相互访问。


  • 类型: 内部类分为四种类型:

  • 成员内部类(Member Inner Class): 定义在外部类内部的非静态类。它可以访问外部类的成员。
  • 静态内部类(Static Inner Class): 定义在外部类内部的静态类。它不依赖于外部类的实例,可以直接通过外部类名访问。
  • 局部内部类(Local Inner Class): 定义在方法内部的类。它只在方法的作用域内可见。
  • 匿名内部类(Anonymous Inner Class): 没有显式类名的内部类,通常用于创建实现接口或继承类的匿名对象。

访问修饰符public仅适用于顶级类和成员类,不适用于本地类或匿名类。访问修饰符 protected和 private 仅适用于成员类

static修饰的类仅适用于成员类和本地类

 访问方式: 访问内部类的方式取决于内部类的型。类成员内部类通过外部类的实例访问,而静态内部类通过外部类名访问。成员类属于类的成员,所以可以调用外部类的 private 成员。外部类可以访问成员类的 private 成员文章来源地址https://www.toymoban.com/news/detail-679424.html


在外部类中创建成员内部类的实例:

public class OuterClass {
    private int x = 10;
    // 成员类
    public class InnerClass {
        public void print() {
            System.out.println("x is " + x);
        }
    }
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.print(); // 输出:x is 10
    }
}

局部内部类 的定义方式如下:

class Outer {
   void print() {
      final int b = 5;
      // 局部内部类
      class Inner {
         void print() {
            System.out.println("b = " + b);
         }
      }
      Inner inner = new Inner();
      inner.print();
   }
}

匿名内部类 的 定义方式如下:

匿名类不能使用修饰符,在方法的内部,对外隐藏。不能是 static ,隐式 final 类。匿
名类没有类名,没有构造方法。
interface A {
   void print();
}
class Outer {
   void print() {
      // 匿名内部类
      A a = new A() {
         public void print() {
            System.out.println("匿名内部类输出");
         }
      };
      a.print();
   }
}

静态内部类 的定义方式如下:

class Outer {
   private static int c;
    // 静态内部类
   static class Inner {
      void print() {
         System.out.println("c = " + c);
      }
   }
}

 内部类的代码演示:

package com.member;

/**
 * 成员类【内部类】
 */
public class Demo {
   static int a;
   static int B = 2;
   static {
       System.out.println("demo static{}");
   }
   static class DemoInner{
       int c = 0;
       static int a;
       static int B = 4;
       static {
           System.out.println("Inner static{}");
       }
       public static void t(){
           System.out.println(123);
       }
       public void test(){
           System.out.println(Demo.B);  // 调用外部类的静态变量
           System.out.println(B);       // 调用当前内部类的静态变量
           System.out.println(this.B);  // 调用当前内部类的静态变量

           new Demo().new Demo3().test();   // 调用另一个非静态内部类的非静态方法

           Demo.test();     // 调用外部类的静态方法
       }
   }
   class Demo3{
       static int B = 6;
       static int a;
       int c =12;
       static {
           System.out.println("demo3 static{}");
       }

       public void test(){
           System.out.println(this.B);      // 调用当前非静态类的静态变量
           System.out.println(Demo.B);      //  调用外部类的静态变量
           // 在实例成员类中可以使用 外部类.this 表示外部类对象 (实例成员类是由外部类对象创建的)成员类中的 this 表示的是成员类
           System.out.println(Demo.this.B);     // 调用外部类的静态变量
       }
   }
   public static void test(){
       System.out.println(DemoInner.a);
       System.out.println(Demo3.a);
       new DemoInner().test();      // 调用静态内部类的非静态方法
   }
}
class Test{
    public static void main(String[] args) {
        Demo.DemoInner i = new Demo.DemoInner();
        System.out.println(i.c);    // 调用内部类的实例变量
        Demo.DemoInner.t();    //调用内部类的静态方法
        int a = Demo.DemoInner.a;    // 调用内部类的静态变量


        int c = new Demo().new Demo3().c;    // 调用非静态类的实例变量
        int a1 = Demo.Demo3.a;    // 调用非静态类的静态变量
        Demo.Demo3 demo3 = new Demo().new Demo3();

        Demo.test();    // 调用外部类的静态方法

    }
}

总结:内部类和外部类区别?

访问修饰符:
                外部类只能有两种访问权限: public 以及 package - access
                内部类可以有四种访问权限: public / protected / package - access / private
​​​​​​​                也就是说:访问修饰符public仅适用于顶级类和成员类,不适用于本地类或匿名类。访问修饰符 protected和 private 仅适用于成员类。
static 修饰: 外部类不可以使用 static 修饰类,内部类可以
使用:外部类可以直接被使用,内部类的使用则依赖于外部类

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

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

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

相关文章

  • Java匿名内部类

    Java中的匿名内部类是一种可以在声明时直接创建对象的内部类。这种内部类没有名字,通常用来简化代码,特别是在定义事件处理程序和监听器方面非常有用。 需要注意的是,匿名内部类不能有构造函数,因为它没有名字。同时,匿名内部类可以访问外部类的成员变量和方

    2024年02月10日
    浏览(34)
  • 【C++】类和对象(下篇)--->再识构造函数,static成员,友元,内部类,匿名对象

    目录 一、构造函数  1、构造函数体赋值  2、初始化列表  3、explicit 二、Static 成员  1、概念  2、特性 三、友元  1、友元函数  2、友元类 四、内部类  1、概念  2、特性 五、匿名对象 六、拷贝对象时的一些编译器优化 在创建对象时,编译器通过调用构造函数,给对

    2024年02月13日
    浏览(44)
  • 【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

    目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友元 ⭕友元的概念 ⭕类友元 ⭕函数友元  四、内部类 ⭕

    2024年02月14日
    浏览(47)
  • 【C++】:类和对象(下):explicit || 再谈构造函数 || static成员 || 友元 || 内部类 || 匿名对象 || 拷贝对象时的编译器优化问题 || 再次理解类和对象

    🔫类和对象(下篇) 🔫【本节目标】 🔫1. 再谈构造函数 🔫2. Static成员 🔫3. 友元 🔫4. 内部类 🔫5.匿名对象 🔫6.拷贝对象时的一些编译器优化 🔫7. 再次理解类和对象 🏄1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值

    2024年01月21日
    浏览(44)
  • Java语言------四种内部类的详细讲解

    目录 一.内部类的介绍 二.内部类的种类 2.1实例内部类       2.2.静态内部类 2.3局部内部类 2.4匿名内部类 总结        内部类: 一个类定义在  另一个类  的  内部。        内部类分为 四种 : 实例内部类、静态内部类、局部内部类、匿名内部类。 使用时机:当一个事

    2023年04月25日
    浏览(43)
  • 局部内部类、匿名内部类、私有内部类

    有关于内部类的讲解,见此篇java内部类的创建 。 下面分别将讲解局部内部类、匿名内部类、私有内部类。 可以在方法中定义内部类,甚至在语句块中也可以定义内部类, 这种情况通常是某个方法需要创建一个类来辅助完成该方法的功能,而这个类只用在该方法中。 局部内

    2023年04月22日
    浏览(34)
  • 【C++】初始化列表、static成员、友元、匿名对象、附练习题

    我们前面学习了关于类和对象的6个默认成员函数,知道了一个空类中有构造函数和析构函数,通过对对象初始化和对象中进行资源清理,达到初始化和销毁的作用。我们再对一些小的点进行补充,看看类和对象的一些细节。 1.1 构造函数体赋值 在创建对象时,编译器通过 调

    2024年02月22日
    浏览(53)
  • JavaSE-----内部类详解(实例内部类,局部内部类,静态内部类,匿名内部类)

        目录 认识内部类: 一.实例内部类: 二.局部内部类: 三 匿名内部类:  四、静态内部类 小结:        🐻🐻🐻什么是内部类?官方解释: Java内部类是指在一个类的内部定义的类。它可以访问外部类的成员变量和方法,并且可以被外部类实例化。 🦉🦉🦉通俗的来

    2024年04月08日
    浏览(48)
  • 内部类和匿名类

    目录 一、内部类 1.数据访问 2.静态内部类  二、内部类和外部类区别 1.访问修饰符: 2.static修饰: 3.使用: 三、匿名类  PS:小练习 一、内部类 内部类是指将一个类定义在另一个里面。 内部类分为static内部类和普通内部类。 这个内编译后会产生两个.class文件,分别是A.clas

    2024年02月11日
    浏览(40)
  • 匿名内部类

    匿名内部类是局部内部类的一种简化形式.本质上是一个对象,是实现了该接口或继承了该抽象类的子类对象. 语法格式:    new 类名或者接口名(){        重写方法;    } ; 给匿名内部类名命: 虽然这是匿名内部类,但是仍然可以利用多态来给匿名内部类名命的哈! 匿名内部类

    2024年02月01日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包