30天学习Java第六天——super关键字

super关键字的用法

  • 指向父类对象
  • 调用父类变量和方法
  • super()可以调用父类的构造方法。默认super()是缺省的,系统会自动调用父类的构造方法。
java 复制代码
public class ReferParentField {
    public static void main(String[] args) {
        new Dog().printColor();
    }
}

class Animal {
    String color = "白色";
}

class Dog extends Animal {
    String color = "黑色";

    void printColor() {
        System.out.println(color);
        System.out.println(super.color);//使用super.color调用的是父类的color字段
    }
}

final 关键字

  1. 被 final 修饰的变量无法被重新赋值,被修饰的方法无法被重写,被修饰的类无法被继承
  2. 被 final 修饰的成员变量必须有个默认值进行初始化
  3. final 和 static 一起修饰的成员变量称为常量,常量名必须全部大写
  4. final 还可以修饰方法的形参,表示在方法体内无法修改该参数

不可变类 immutable class

  1. 不可变类 String
    为什么 String 要被设计为不可变的?
    1. 常量池的需要 字符串常量池是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串在常量池中不存在,那么就创建一个;假如已经存,就不会再创建了,而是直接引用已经存在的对象。这样做能够减少 JVM 的内存开销,提高效率。
    2. hashCode 需要 因为字符串是不可变的,所以在它创建的时候,其他 hashCode 就被缓存了,因此十分适合作为哈希值,多次调用只返回同一个值。
    3. 为了线程安全 类一旦不可变,其对象的状态也就不可变了。如果对象的状态是可变的,在多线程环境下,就容易造成不可预期的结果。

      因此我们使用String类的任何方法时,总会返回一个新的对象,而不影响之前的对象,从而也就保持了对象状态的稳定性。

  2. 不可变类满足的条件
  • 确保类是 final 的,不允许被其他类继承
  • 确保所有的成员变量是 final 的,如此一来,它们就只能在构造方法中被初始化,之后就不会被修改了
  • 不要提供 setter 方法
  • 如果要修改类的状态,必须返回一个新的对象

注:本文章来源自博主沉默王二 的二哥的Java进阶之路学习内容。

相关推荐
后台模板学习5 分钟前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
西瓜拿铁好喝9 分钟前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
学长毕设11 分钟前
基于SpringBoot的校园礼服租赁系统的设计与实现
java·spring boot·后端
明天也要努力学习17 分钟前
深入理解 JVM 垃圾回收(GC)
java·jvm
xiaoye-duck20 分钟前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型
golang学习记24 分钟前
IDEA 断点调试技巧:拖拽
java·ide·intellij-idea
fpcc25 分钟前
跟我学c++中级篇—streambuf在glog中的应用分析
开发语言·c++
Sayai26 分钟前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算
吾与谁归in26 分钟前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
计算机毕设定制辅导-无忧学长28 分钟前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法