JAVA类数组和方法的重构
数组初始化器
数组初始化器允许你在声明数组时直接提供数组的初始值。这种方式简洁且直观。 例如:
- 显式初始化:
Chief[] chiefs = new Chief[2];
chiefs[0] = c1;
chiefs[1] = c2;
- 隐式初始化(使用数组初始化器):
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,如下所示:
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 对象。
引用的特点
- 多态性:引用可以指向其子类的实例。例如,假设你有一个 Cat 的子类 PersianCat:
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 类型的引用:
Cat myCat = new PersianCat("Fluffy", 4, "White");
在这种情况下,myCat 引用仍然可以调用 Cat 类中的方法,但不能直接调用 PersianCat 类中特有的方法(如 getFurColor)。
2. 空引用:引用可以被设置为 null,表示它不指向任何对象:
Cat myCat = null;
//尝试调用 null 引用的方法会导致 NullPointerException:
if (myCat != null) {
System.out.println(myCat.getName());
} else {
System.out.println("myCat is null");
}
完整示例
下面是一个完整的示例,展示了如何声明、创建和使用 Cat 对象引用:
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,表示它不指向任何对象。