gpt4 book ai didi

java - 接口(interface)抽象之间的区别(不重复)

转载 作者:行者123 更新时间:2023-11-30 03:42:26 27 4
gpt4 key购买 nike

我想知道这两个代码之间的区别。我有一个界面:让我们说:

public interface iaminterface {
void m1();
void m2();
void m3();
}

第一个代码:

public abstract class iamabstract implements iaminterface  {
public void m1(){}
public abstract void m2(); // abstract method .So i need to override this in the subclasses.
}

public class car extends iamabstract {
public void m2(){}
public void m3(){}
}


public class train extends iamabstract {
public void m2() {}
public void m3() {}
}

此代码将成功编译。但这段代码与编写相同:

第二个代码:

 public abstract class iamabstract implements iaminterface {

public void m1(){}

}

public class car extends iamabstract {
public void m2(){}
public void m3(){}
}


public class train extends iamabstract {
public void m2() {}
public void m3() {}
}

我不明白这两个代码的区别。两个代码将以类似的方式运行。一个有抽象方法,另一个没有抽象方法,所以我们需要实现接口(interface)未实现的方法。那么,在第一个代码中将方法 m2() 写为抽象有什么用呢? ?

最佳答案

您想要重写抽象类中的接口(interface)方法的唯一原因是您想要对返回的类型更具体。例如:

public interface TheInterface {
Object getTheObject();
}

public abstract class TheAbstractClass implements TheInterface {
@Override
public abstract String getTheObject();
}

请注意,即使使用了@Override注释,抽象类方法实际上返回的是String而不是Object。这不会破坏实现 TheInterface 的对象将从该方法返回 Object 的约定 - String 是一个 Object,毕竟。

但是,它确实允许您使用 TheAbstractClass 的具体子类型,并确定它会给您一个 String

关于java - 接口(interface)抽象之间的区别(不重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com