当前位置:首页 » 《关注互联网》 » 正文

Java 内部类

20 人参与  2024年10月31日 12:40  分类 : 《关注互联网》  评论

点击全文阅读


个人主页:鲤鱼王打挺-CSDN博客

Java专栏:Java_鲤鱼王打挺的博客-CSDN博客

?前言:

接口的拓展部分比较难写,小编想先理解透些再写文章,今天我们来认识一下类剩下的组成部分:内部类!

在Java中,内部类(Inner Class)是指定义在另一个类的内部的类。内部类可以访问外部类的所有成员,包括私有成员。内部类提供了一种将类组织在一起的方式,使得代码更加模块化和封装。

内部类主要有以下几种类型:

静态内部类(Static Inner Class):

成员内部类(Member Inner Class):

匿名内部类(Anonymous Inner Class)

局部内部类(Local Inner Class):

?一.静态内部类(Static Inner Class)

定义在另一个类的内部,但被声明为静态的。不能访问外部类的非静态成员。外部类可以直接访问静态内部类的静态成员。
public class OuterClass {    public int data1 = 11;    private int data2 = 101;    public static int data3 = 1001;    public void test(){        System.out.println("外部类方法");    }    static class InnerClass{        public int data4 = 10001;        public static int data5 = 100001;        public void fun(){            System.out.println("内部类方法");        }    }}

 创建对象时可不能直接用外部类调用,否则会报错,因为该方法属于局部方法。

可以用如下图格式来创建静态内部类对象 ,(当我们提及内部类时,最好带上类型名,因为他们是有差别的!)实例化对象时没有依赖于外部类对象!

当我们在内部类成员方法中准备调用变量时,可以发现只显示了三个变量?!是编译器偷懒吗?

其实是因为静态内部类中如果要调用外部类变量,那么该变量必须是静态的,也就是在内部类中只能访问外部类的静态成员。

如果是外部类非静态方法 或 方法中的变量,那么内部类也不能直接访问。

 

?二.成员内部类(Member Inner Class)

定义在另一个类的内部,但不属于任何方法。可以访问外部类的所有成员,包括私有成员。外部类不能直接访问内部类的私有成员。

成员内部类也称为实例内部类,也可以看成非静态的内部类。

class InnerClass{        public int data4 = 10001;        public static int data5 = 100001;        public void fun(){            System.out.println("内部类方法");        }    }

 

 由于实例内部类与静态内部类不同,它是依赖外部类的,所以我们有两种方法创建对象:

⭐️1.在外部类内new一个内部类对象

⭐️2. 使用匿名对象

1.实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
2.在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员来访问
3.实例内部类的 非静态方法中 包含了一个指向外部类对象的引用(?)
4.外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。
 

 

?三.匿名内部类(Anonymous Inner Class)

没有名字的内部类。

通常用于继承其他类或实现接口。只能使用一次,不能被引用。

 匿名内部类顾名思义,没有设置变量名,一般有下面几种形式:

⭐️1. 匿名内部类一般没有明确的类名,且通常只用于创建一个对象,因此不需要重复定义类;

⭐️2. 可以借助类变量

⭐️3. 结合接口(可以继承一个类或实现一个接口)

public interface ITestAble {    void test();}

 

在定义匿名内部类的同时,也创建了其实例 。

?四.局部内部类(Local Inner Class)

定义在方法内部的类。只能访问方法的final或effectively final的局部变量。外部类不能直接访问局部内部类。

 这个类小编感觉很少会使用,观察字节码文件会发现它一样也有自己的独立文件,但是它只在方法内部使用:

?小结:

学习的过程肯定伴随着孤独,希望大家砥砺前行,不言放弃! 这次的分享先到此为止了。希望大家点赞关注支持下小编!


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/180442.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1