简述Java内部类

Java:简述内部类

在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类,嵌套其他类的类称为外部类。

内部类是类的第五大成员(类的五大成员:属性,方法,构造器,代码块,内部类)

内部类宝库包括这几类:成员内部类、局部内部类、匿名内部类、静态内部类

一、成员内部类

  • 就是类中的一个普通成员,类似前面我们学过的成员变量、成员方法
  • 可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
  • 同名的属性名/方法名访问外部类时 → 外部类.this.成员名
public class Outer {
    // 成员内部类
    public class Inner{
    }
}

创建对象的格式

// 要创建成员内部类的对象,前提是必须存在一个外部类的对象
Outer outer= new outer();
Inner inner = outer.new Inner();
// 创建内部类对象
//外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);
Outer.Inner in = new Outer().new Inner();
  • 成员内部类中不能定义静态变量和方法

二、局部内部类

  1. 局部内部类定义在一个方法或者一个作用域里面,它的访问仅限于方法内或者该作用域内
  2. 同局部变量相同,不可使用权限修饰符、static修饰符进行修饰
  3. 可以直接访问方法中的属性
  4. 局部内部类创建对象 要在方法内部 局部内部类的外部声明

例:

public class Partial {
 public void demo(){
  //局部内部类
  class Inner{
        }
    }   
}

三、静态内部类

  • 有static修饰的内部类,属于外部自己持有。

  • 也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static;

public class Outer{
    public static class Inner{
    }
}

创建对象的格式

外部类名.内部类名 对象名 = new 外部类.内部类(...);
Outer.Inner in = new Outer.Inner();
  • 静态内部类中可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。

四、匿名内部类

就是一种特殊的局部内部类,不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

  • 可用于给方法传递实参。
  • 能实现接口,但是没有名字
// 匿名内部类创建格式
new 类或接口(参数值...){
   类体(一般是方法重写);
}

  好抽象,但是大概就是:首先有一个接口,然后在使用的类中编写了一个方法(参数类型是接口对象),并使用接口中未实现的方法。我们调用此方法直接构造一个接口对象传入,此时会自动生成一个此接口的子类(匿名内部类)实现接口中的方法。本质传入的类便是此时的匿名内部类。

 

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/78260.html

(0)
guozi's avatarguozi
上一篇 2024年5月29日 下午4:37
下一篇 2024年5月29日 下午4:41

相关推荐

  • 高防CDN的防御特点是什么?

    高防CDN(内容分发网络)具有一系列特点,使其能有效地对抗DDoS(分布式拒绝服务)攻击以及其他形式的网络攻击。这些防御特点主要包括: 通过这些特点,高防CDN能够提供全面的防护措…

    CDN资讯 2024年2月2日
    0
  • CDN防御不容松懈,不小心几十上百G没了

    之前使用阿里云CDN时遭受过攻击,无奈阿里云不分析具体数据,自己下载日志又没有分析出所以然,只得迁移到腾讯云CDN(必须好评)。在此次遭受的攻击中,虽然宕机不及时,消耗了10多G流…

    2024年7月11日
    0
  • DNS 解析数据大局观

    2019 工作背景 现代权威 DNS 服务器非常复杂,可以根据请求的地理位置、延迟与内容过滤策略给出不同的响应。任何被动方式评估 DNS 的研究人员,都只能了解到部分情况。此前 O…

    2024年8月2日
    0
  • 怎么用 UDP 实现 TCP?

    来自公众号:悟空聊架构 本篇来自于我的一次真实面试经历。 背景 本题是我在面试中,技术总监问我的一道真题,当时答得不太好,所以把它揪出来总结了下。后来问了下总监,总监说这是阿里的面…

    2024年5月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注