Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免在同级类中重复代码_Java - Fatal编程技术网

Java 避免在同级类中重复代码

Java 避免在同级类中重复代码,java,Java,初学者问题-我如何避免在兄弟类中重复代码,因为每个类都有同一字段的不同版本? 请参见下面的示例:我是否可以将getName()方法(以及更复杂的方法)移动到父类 public abstract class Car { public abstract String getName(); } public class PassengerCar extends Car { private String name = "Passenger Car"; @Override p

初学者问题-我如何避免在兄弟类中重复代码,因为每个类都有同一字段的不同版本? 请参见下面的示例:我是否可以将getName()方法(以及更复杂的方法)移动到父类

public abstract class Car {
    public abstract String getName();
}

public class PassengerCar extends Car {
   private String name = "Passenger Car";

   @Override
   public String getName() { return name; }
}

public class CoalCar extends Car {
   private String name = "Coal Car";

   @Override
   public String getName() { return name; }
}

例如,您可以在父类中创建一个采用名称的构造函数,并在子类的构造函数中指定该名称:

abstract class Car {

    private String name;

    public Car(String name) {
        this.name = name;
    }

    public String getName() { return name; }

}

class PassengerCar extends Car {

    public PassengerCar() {
        super("Passenger Car");
    }

}

class CoalCar extends Car {

    public CoalCar() {
        super("Coal Car");
    }

}
然后可以这样使用:

Car passenger = new PassengerCar();
System.out.println(passenger.getName());
这将打印出:

Passenger Car

@马克的答案是解决方案,但让我给它添加一点背景知识

简单的经验法则:如果您想要所有子类都有共同点的东西,请将其放入父类中

你有什么

  • 所有子类都使用一个名为
    name
    的字段(值不同并不重要,请参见下文)
  • 所有子类都使用名为
    getName()
    的getter
  • 所有乘客卡实例的初始值
    “乘用车”
  • 所有
    CoalCar
    实例的初始值
    “CoalCar”

因此,
name
字段和
getName()
方法进入
Car
,该字段的不同初始值进入
PassengerCar
CoalCar
的构造函数,尝试了什么?