java学习

静态内部类和非静态内部类

 

静态内部类

非静态内部类

内部定义的成员变量、方法

可以是静态的,也可以是非静态的

不能定义静态成员(包括静态变量、静态方法、静态内部类)因为静态成员属于类级别的,定义了后不知道这个成员到底是属于内部类还是外部类

访问外部类成员的权限

只能访问外部类的静态成员(包括private static,不能访问非静态成员。

可以直接访问外部类的所有成员(包括private成员),无论是静态还是非静态。

创建方法

不依赖于外部类的实例化,直接创建

依赖于外部类的实例化

垃圾回收

不持有外部类引用,无右边所述的内存泄漏问题,更轻量

因持有外部类引用,可能导致外部类对象无法被 GC 回收(内存泄漏风险),尤其当内部类对象生命周期长于外部类时。

 

 

内部类的权限:

内部类权限

访问范围

典型用途

private

仅外部类自身

完全封装内部逻辑,不对外暴露

默认(包权限)

同一包下的类,其他包的类(包括子类)无法访问

包内共享内部实现

public/protected

更广范围(所有类 / 子类 + 同包)

对外暴露内部结构(如 HashMap.Entry

方法的重载和重写

重载:同一个类中,多个方法具有相同的方法名,但参数列表不同(参数类型、个数、顺序不同),这种现象称为重载只要求方法的名字一样,且方法的参数类型或个数不一样,对返回值无要求。

重写:方法名和参数和返回值是一样的。

定义:在继承关系中,子类定义了一个与父类方法名、参数列表完全相同的方法,用于覆盖父类的实现,这种现象称为重写。

心规则(两同两小一大):

  1. 方法名、参数列表必须完全相同(与父类方法签名一致);
  2. 返回值类型:
  3. 访问修饰符:子类方法的访问权限不能比父类更严格(如父类是 public,子类不能是 private);
  4. 异常声明:子类方法不能抛出比父类方法范围更大的受检异常(可少抛、不抛或抛子类异常);
  5. 静态方法不能被重写(静态方法属于类,子类的同名静态方法只是隐藏父类方法,而非重写);
  6. final 方法不能被重写(final 修饰的方法禁止子类修改)。

 

final 修饰不同元素的核心特性

不可继承

无子类,类的所有方法默认不可重写(无需额外加 final)

方法

不可重写

可被继承和调用,但子类不能覆盖其实现

基本类型变量

数值不可变

赋值后不能修改

引用类型变量

引用地址不可变

不能指向新对象,但对象内部属性可修改

成员变量

必须在初始化阶段赋值

实例变量在构造前赋值,类变量在类加载前赋值

方法参数

方法内部不可修改参数值 / 引用

保护参数不被意外修改

 

Java 中,范围限定符就是publicprotected

默认(无修饰符)private

 

全部评论

相关推荐

08-28 10:31
门头沟学院 Java
每周末都在做笔试
no_work_no...:有就做,没有就刷力扣 面试同理,有就面,没有就背八股
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务