Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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,所以,我有这个讲座,我正在准备考试。我必须编写代码,以便我的代码通过每个Junit测试。 有一件事我总是不知道怎么弄清楚,什么时候我应该使用接口或子类 有人能告诉我如何根据Junit测试决定使用哪一个吗 我有一辆火车,里面有两种类型的火车:TGV和摆式 我知道测试名称明确地说是subclass,但是忽略它 公共级铁路路考{ @Test public void testTrain() { Train c1 = new Train("Regional"); assertEquals(

所以,我有这个讲座,我正在准备考试。我必须编写代码,以便我的代码通过每个Junit测试。 有一件事我总是不知道怎么弄清楚,什么时候我应该使用接口或子类

有人能告诉我如何根据Junit测试决定使用哪一个吗

我有一辆火车,里面有两种类型的火车:TGV和摆式

我知道测试名称明确地说是subclass,但是忽略它

公共级铁路路考{

@Test
public void testTrain() {
    Train c1 = new Train("Regional");
    assertEquals("Regional", c1.getName()); 

    Train c2 = new Train("Intercidades");
    assertEquals("Intercidades", c2.getName()); 
}

@Test
public void testSubclassesTrain() {     
    Train tgv = new TGV("Speeder");
    assertEquals("Speeder", tgv.getNome());

    Train pendular = new Pendular("Alfa Pendular");
    assertEquals("Alfa Pendular", pendular.getNome());
}

如果两种类型的列车共享相似的功能或代码,则最好使用子类。
接口允许相同的方法签名,但不包含实际代码(除非您使用的是java 8)。

接口确保实现它的每个类都具有相同的方法签名(命名和参数)。对于这些方法签名,每个类可能有完全不同的代码实现。它们不一定共享任何代码,尽管理论上它们可以共享

当您创建子类时,您可以拥有来自基类的共享代码。您还可以通过在方法中调用super([parameters])来构建基础功能。或者您可以使用子类范围内(受保护、公共等)的基础方法中的现有功能


如果子类要扩展两个或多个类(多重继承),则使用接口;如果您只扩展子类中的一个类,则使用继承(子类)功能。

使用接口或子类是两件完全不同的事情,目的也完全不同。我不明白你想问什么。这两种方法都可以。我也不明白这个问题。问题是:你确实需要子类;因为你必须使用“new”创建一些对象.现在,如果你像
InterfaceName myvar=new(…
或者如果你指定
SubclassName myvar=new…
这样创建的对象,这只是一个微妙的细节。而且-这两个版本中哪一个“更好”通常无法回答。这样的问题只有在“真实”的上下文中才有意义实际需求的问题。您可以使用这个拇指规则:如果您需要所有子类之间的共同行为,请使用一个基本抽象类。另一方面,如果没有默认行为,请使用一个接口。但是,如果您使用的是Java 8,则可以使用带有默认方法实现的接口,以便您可以选择两者。