当前位置: 首页 > news >正文

Java和Ts构造函数的区别

java中子类在使用有参构造创建对象的时候不必要必须调用父类有参构造
而js则必须用super()调用父类的有参构造,即使用不到也必须传递

Java 中的处理方式

  1. 可选择性参数:

    • 在 Java 中,当子类使用父类的有参构造方法创建对象时,可以只传递需要的参数。如果父类的构造方法有多个参数,子类可以选择不传递某些参数,只传递那些需要的参数。
  2. 构造函数重载:

    • Java 支持构造函数重载,因此可以为父类定义多个构造函数,子类可以调用合适的构造函数。
class Animal {private String name;private int age;// 有参构造public Animal(String name, int age) {this.name = name;this.age = age;}public Animal(String name) {this.name = name;this.age = 0; // 默认年龄}public void sayHello() {System.out.println("动物在叫~");}
}class Dog extends Animal {public Dog(String name) {super(name); // 只需传递 name,age 使用默认值}public void sayHello() {System.out.println("汪汪汪汪!");}
}// 使用示例
Dog dog = new Dog("旺财");

JavaScript/TypeScript 中的处理方式

  1. 必须传递的参数:
    • 在 JavaScript(TypeScript)中,如果子类的构造函数调用父类的有参构造函数,必须传递所有的参数,尽管子类可能不需要使用某些参数。这是因为 JavaScript 不支持构造函数重载,所有必要的参数都需要传递以确保父类的正确初始化。
示例(JavaScript/TypeScript)
class Animal {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log('动物在叫~');}
}class Dog extends Animal {constructor(name: string, age: number) {super(name, age); // 必须传递所有参数}sayHello() {console.log('汪汪汪汪!');}
}// 使用示例
const dog = new Dog('旺财', 3); // 必须传递 age
  • Java: 子类在构造对象时可以选择性地传递父类构造函数的参数,且可以通过重载实现多个构造函数。
  • JavaScript/TypeScript: 子类在构造对象时必须将父类构造函数的所有参数都传递,即使子类不需要使用某些参数。

  1. 构造函数重载:

    • Java: 支持构造函数重载,可以在同一类中定义多个构造函数,参数可以有不同的数量和类型。
    • TypeScript: 不支持构造函数重载,定义多个构造函数会导致错误。可以通过可选参数或默认参数来模拟重载。
  2. 参数传递:

    • Java: 子类在调用父类的构造函数时,可以选择性地传递参数。例如,可以只传递部分参数,使用默认值或其他构造函数。
    • TypeScript: 子类必须传递父类构造函数中定义的所有参数,无法选择性传递。
  3. 访问控制:

    • Java: 有严格的访问控制(public、protected、private),可以控制构造函数的可见性。
    • TypeScript: 也支持访问修饰符,允许设置构造函数的访问级别,但在实践中使用较少。
  4. 构造函数的调用:

    • Java: 使用 super() 调用父类构造函数是可选的,只要父类有无参构造函数。
    • TypeScript: 如果子类定义了构造函数,必须在子类构造函数的第一行调用 super(),并传递必要的参数。
  5. 初始化方式:

    • Java: 可以在构造函数中进行复杂的初始化逻辑。
    • TypeScript: 也可以在构造函数中进行初始化,但由于 JavaScript 的动态特性,类型检查和初始化逻辑可能会有所不同。
  6. 类型系统:

    • Java: 是静态类型语言,类型在编译时检查。
    • TypeScript: 是一个超集,提供静态类型,但最终会编译成动态类型的 JavaScript,因此类型检查是在开发时进行的。
http://www.lryc.cn/news/468226.html

相关文章:

  • 植物健康,Spring Boot来助力
  • 百度文心一言接入流程-java版
  • Java 11 新特性深度解析与应用实践
  • druid 连接池监控报错 Sorry, you are not permitted to view this page.本地可以,发布正式出错
  • [RN与H5] 加载线上H5通信失败问题记录(启动本地H5服务OK)
  • electron 打包
  • ChatGLM-6B和Prompt搭建专业领域知识问答机器人应用方案(含完整代码)
  • 虚拟机配置静态IP地址(人狠话不多简单粗暴)
  • Android token JJWT
  • 动态规划<一>初识动态规划
  • 【AIGC】ChatGPT提示词Prompt精确控制指南:Scott Guthrie的建议详解与普通用户实践解析
  • 2024年10月24日随笔
  • 怎么做系统性能优化
  • 负载均衡:四层与七层
  • 【Ubuntu】服务器系统重装SSHxrdpcuda
  • ChatGPT的模型训练入门级使用教程
  • 【OS】2.1.2 进程的状态与转换_进程的组织
  • 和为 n 的完全平方数的最少数量
  • Hallo2 长视频和高分辨率的音频驱动的肖像图像动画 (数字人技术)
  • 如何在Debian 8上使用Let‘s Encrypt保护Apache
  • 百科知识|选购指南
  • Go 语言基础教程:4.常量的使用
  • centos服务器重启后,jar包自启动
  • 华为云实战杂记
  • Lesson10---list
  • ASP.NET Core 8.0 中使用 Hangfire 调度 API
  • 查看linux的版本
  • Mysql补充
  • com.baomidou.mybatisplus.extension.service.IService用法详解及使用例子
  • 植物健康,Spring Boot来保障