Skip to content

JAVA类数组和方法的重构

数组初始化器

数组初始化器允许你在声明数组时直接提供数组的初始值。这种方式简洁且直观。 例如:

  • 显式初始化:
java
Chief[] chiefs = new Chief[2];
chiefs[0] = c1;
chiefs[1] = c2;
  • 隐式初始化(使用数组初始化器):
Java
Chief[] chiefs = {c1, c2};

方法重载

如果希望 show 方法能够显示 Chief 对象的属性,那么直接在 show 方法中传递参数并不是最佳实践。通常情况下,对象的属性应该在构造函数中初始化,并通过 getter 方法来访问这些属性。

然而,如果坚持要使用 show 方法并传递参数,你可以这样做,但需要注意以下几点:

  • 方法重载:你需要为不同的参数类型重载 show 方法。
  • 参数传递:在调用 show 方法时,确保传递正确的参数。

eg. show 方法:
String show(String property):根据传入的属性名称返回相应的字符串值。
int show(String property, int defaultValue):根据传入的属性名称返回相应的整数值,如果没有找到对应的属性,则返回默认值。

注意事项

  • 性能考虑:每次调用 show 方法时都需要进行字符串比较,这可能会影响性能。
  • 代码可读性:这种方法虽然可行,但不如直接使用 getter 方法清晰和简洁。
  • 通常情况下,推荐使用 getter 方法来访问对象的属性,这样代码更加简洁和易于维护。

有关类数组你还需要了解的内容:

Java 中,当数据类型是一个类的名字时,这意味着你正在声明一个该类的对象引用。这个引用可以指向该类的一个实例(对象),也可以指向其子类的实例,或者可以为空(null)。

类型声明

假设你有一个类 Cat,如下所示:

java
public class Cat {
    private String name;
    private int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

声明对象引用

当你声明一个类型为 Cat 的变量时,你实际上是在声明一个引用,这个引用可以指向一个 Cat 对象:

Cat myCat;
在这个例子中,myCat 是一个 Cat 类型的引用,但它还没有指向任何实际的对象。此时,myCat 的值是 null。

创建对象

要使 myCat 引用指向一个实际的 Cat 对象,你需要使用 new 关键字来创建一个对象:

Cat myCat = new Cat("Whiskers", 3); 在这行代码中,new Cat("Whiskers", 3) 创建了一个新的 Cat 对象,并将其引用赋值给 myCat 变量。现在,myCat 指向了一个实际的 Cat 对象。

引用的特点

  1. 多态性:引用可以指向其子类的实例。例如,假设你有一个 Cat 的子类 PersianCat:
java
public class PersianCat extends Cat {
    private String furColor;

    public PersianCat(String name, int age, String furColor) {
        super(name, age);
        this.furColor = furColor;
    }

    public String getFurColor() {
        return furColor;
    }

}

可以将 PersianCat 对象赋值给 Cat 类型的引用:

java
Cat myCat = new PersianCat("Fluffy", 4, "White");

在这种情况下,myCat 引用仍然可以调用 Cat 类中的方法,但不能直接调用 PersianCat 类中特有的方法(如 getFurColor)。
2. 空引用:引用可以被设置为 null,表示它不指向任何对象:

java
Cat myCat = null;
//尝试调用 null 引用的方法会导致 NullPointerException:

if (myCat != null) {
    System.out.println(myCat.getName());
} else {
    System.out.println("myCat is null");
}

完整示例

下面是一个完整的示例,展示了如何声明、创建和使用 Cat 对象引用:

java
public class Main {
    public static void main(String[] args) {
        // 声明一个 Cat 类型的引用
        Cat myCat;

        // 创建一个 Cat 对象并赋值给引用
        myCat = new Cat("Whiskers", 3);

        // 调用对象的方法
        System.out.println("Name: " + myCat.getName());
        System.out.println("Age: " + myCat.getAge());

        // 创建一个 PersianCat 对象并赋值给 Cat 类型的引用
        Cat myPersianCat = new PersianCat("Fluffy", 4, "White");

        // 调用对象的方法
        System.out.println("Name: " + myPersianCat.getName());
        System.out.println("Age: " + myPersianCat.getAge());

        // 试图调用子类特有的方法会编译失败
        // System.out.println("Fur Color: " + myPersianCat.getFurColor()); // 编译错误

        // 将引用设置为 null
        myCat = null;

        // 检查引用是否为 null
        if (myCat != null) {
            System.out.println("Name: " + myCat.getName());
        } else {
            System.out.println("myCat is null");
        }
    }
}

class Cat {
    private String name;
    private int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

class PersianCat extends Cat {
    private String furColor;

    public PersianCat(String name, int age, String furColor) {
        super(name, age);
        this.furColor = furColor;
    }

    public String getFurColor() {
        return furColor;
    }
}

总结

  • 声明:Cat myCat; 声明了一个 Cat 类型的引用。
  • 创建:myCat = new Cat("Whiskers", 3); 创建了一个 Cat 对象并将其引用赋值给 myCat。
  • 多态性:Cat 类型的引用可以指向其子类的实例。
  • 空引用:引用可以被设置为 null,表示它不指向任何对象。