上一章节快速入门案例中是先创建一个猫对象,再给猫的属性赋值,现在要求在创建猫对象的时候,就直接指定猫的姓名、年龄和颜色,这个时候该怎么做呢?【使用构造方法,也称为构造器
构造器的作用:完成对象的初始化,注意构造器是没有返回值的

Java(回顾)

  1. public class Constructor {
  2. public static void main(String[] args) {
  3. Person p1 = new Person();
  4. Person p2 = new Person("李四", 22);
  5. System.out.println("p1 = " + p1);
  6. System.out.println("p2 = " + p2);
  7. }
  8. }
  9. /**
  10. * Person类
  11. * 语法:
  12. * [修饰符] 方法名(形参列表) {
  13. * 构造方法体
  14. * }
  15. */
  16. class Person {
  17. public Person() {
  18. this.name = "张三";
  19. this.age = 18;
  20. }
  21. public Person(String name, int age) {
  22. this.name = name;
  23. this.age = age;
  24. }
  25. private String name;
  26. private int age;
  27. @Override
  28. public String toString() {
  29. return "[name=" + name + ", age=" + age + "]";
  30. }
  31. }

📝 详细说明

  • 在 Java 中,一个类可以定义多个不同的构造器,这些构造器重载
  • 如果代码中没有显式定义构造器,那么系统会自动生成一个默认的无参构造器
  • 如果代码中显式定义了构造器,那么默认的无参构造器就被覆盖了,不能再使用

    Scala

    Scala 创建对象时也需要调用构造器,且构造器支持重载
    Scala 的构造器包括:主构造器和辅助构造器 ```scala object Constructor { def main(args: Array[String]): Unit = { val p: Person = new Person(“张三”, 18) println(p.toString) } }

/**

  • Person类
  • 语法:
  • class 类名(形参列表) { // 主构造器
  • def this(形参列表) {} // 辅助构造器
  • } */ class Person(inName: String, inAge: Int) { var name: String = inName var age: Int = inAge

    def this() { this(“小明”, 10) }

    def this(name: String) { this(name, 10) println(“初始化成功~~~”) }

    // 重写 toString 方法 override def toString: String = s”[ name=${this.name}, age=${this.age}]” } ``` 📝 详细说明
    👉 1. 主构造器

  • 主构造器的声明直接放在类名之后
  • 主构造器会执行类中定义的所有语句
  • 主构造器无参时,小括号可以省略,此时在创建对象时小括号也可以省略

👉 2. 辅助构造器

  • 辅助构造器的声明不能和主构造器一样,否则会发生错误
  • 辅助构造器可以有多个,名称为 this,只是形参列表不同
  • 辅助构造器第一行必须显式调用其他构造器,无论是直接还是间接,最终一定要执行主构造器
  • 如果只想通过辅助构造器创建对象,那么可以私有化主构造器,比如:class Person private(...)