在 Java 中访问不同的 类' 静态成员时避免代码重复
Avoid code-duplication while access different classes' static members in Java
我正在写一个摘要 class 并且有一些子 class 扩展它。我在 sub-classes 中有完全相同的方法和相同的实现,我想知道是否有办法避免代码重复。问题在于,尽管每个 class 中的代码完全相同,但它使用了 class 的静态变量。有没有办法让方法只写一次(例如在抽象 class 中)并让方法从当前的 class 类型访问静态成员“NAME
”对象?
也就是说,有没有办法只实现方法getName()
一次,而return当前类型class的NAME
静态变量呢?
public abstract class Car {
public abstract String getName();
}
public class Bus extends car{
private static final String NAME = "Bus a Bus A";
public String getName() {
return Bus.NAME;
}
}
public class Taxi extends car{
private static final String NAME = "TAXiiii";
public String getName() {
return Taxi.NAME;
}
}
public class Motor extends car{
private static final String NAME = "motor hehe";
public String getName() {
return Motor.NAME;
}
}
为什么不简单地将名称传递给超级构造函数?虽然这消除了 Car
成为 abstract
的需要,因为您可以简单地 return 来自其 getName
方法的名称。
public class Car {
private final String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Bus extends Car {
private static final String NAME = "Bus a Bus A";
public Bus() {
super(NAME);
}
}
public class Taxi extends Car {
private static final String NAME = "TAXiiii";
public Taxi() {
super(NAME);
}
}
public class Motor extends Car {
private static final String NAME = "motor hehe";
public Motor() {
super(NAME);
}
}
我正在写一个摘要 class 并且有一些子 class 扩展它。我在 sub-classes 中有完全相同的方法和相同的实现,我想知道是否有办法避免代码重复。问题在于,尽管每个 class 中的代码完全相同,但它使用了 class 的静态变量。有没有办法让方法只写一次(例如在抽象 class 中)并让方法从当前的 class 类型访问静态成员“NAME
”对象?
也就是说,有没有办法只实现方法getName()
一次,而return当前类型class的NAME
静态变量呢?
public abstract class Car {
public abstract String getName();
}
public class Bus extends car{
private static final String NAME = "Bus a Bus A";
public String getName() {
return Bus.NAME;
}
}
public class Taxi extends car{
private static final String NAME = "TAXiiii";
public String getName() {
return Taxi.NAME;
}
}
public class Motor extends car{
private static final String NAME = "motor hehe";
public String getName() {
return Motor.NAME;
}
}
为什么不简单地将名称传递给超级构造函数?虽然这消除了 Car
成为 abstract
的需要,因为您可以简单地 return 来自其 getName
方法的名称。
public class Car {
private final String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Bus extends Car {
private static final String NAME = "Bus a Bus A";
public Bus() {
super(NAME);
}
}
public class Taxi extends Car {
private static final String NAME = "TAXiiii";
public Taxi() {
super(NAME);
}
}
public class Motor extends Car {
private static final String NAME = "motor hehe";
public Motor() {
super(NAME);
}
}