[英]Do i need to implement all the methods of interface again while inheriting abstract class in Java?
我试图扩展一个抽象类,它实现了一个接口方法,所以在我的子类中,我试图实现接口中声明的其余方法,但子类强迫我声明接口的所有方法,请帮我解决这个问题,在此先感谢我在下面添加了我的代码。 非常感谢前辈。
我的代码
interface xxx
{
int numbers();
String names();
Double salary();
}
abstract class GetNames implements xxx
{
public String names()
{
return "Ravi";
}
}
class Check extends GetNames
//This class forcing me to implement names also
{
public int numbers()
{
return 3;
}
public double sal()
{
return 25000.00;
}
}
public class AbsUsingInterface {
}
您只需要实现接口中尚未在抽象类中实现的方法,抽象类是您尝试实现方法的类的超类。
但看起来我在你的 Check 课上看到了一个问题。
你的接口声明了这个方法,
Double salary();
在检查类中,您正在实施此方法,
public double sal()
所以这真的没有从接口实现一个方法。 您需要使其与界面中的相同。
只需像这样在您的 Check 类中创建方法,
public Double salary()
{
return 25000.00;
}
在从超类/接口实现/覆盖方法时,您应该始终使用 @Override 注释,以便万一您的任何方法签名不同,它会在那里提示您出错。 是的,如果您在子类 Check 中再次声明 names() 方法,它将覆盖抽象类中的方法。您可以在类中执行类似操作,
abstract class GetNames implements xxx
{
@Override
public String names()
{
return "Ravi";
}
}
class Check extends GetNames
{
@Override
public int numbers()
{
return 3;
}
public double sal()
{
return 25000.00;
}
@Override
public Double salary() {
return sal();
}
@Override
public String names() { // this overrides names() method in GetNames class
return "Check";
}
}
扩展abstract
类的具体类必须为超类中的所有抽象方法提供主体。
接口中的方法默认是abstract
除非您提供默认主体。
当抽象类实现接口时,接口的所有方法都被继承为抽象类
现在对于您的场景,您已经为接口的一个继承方法提供了一个主体,该方法在“抽象”类的范围内不再是抽象的。 所以,如果一个类扩展了这个抽象类,那么它不需要为上述方法提供主体,因为它不再是抽象的(他们当然可以覆盖它)。
您在Check
子类中收到错误,该子类已定义为不继承salary()
方法,而不是您已在GetNames
抽象类中定义的names()
方法
你的 GetNames 类正在实现 xxx 接口,但你只实现了 names() 你必须实现salary 方法。
interface xxx
{
int numbers();
String names();
Double salary();
}
abstract class GetNames implements xxx
{
public String names()
{
return "Ravi";
}
public Double salary()
{
return null;//just return null;
}
}
class Check extends GetNames
{
public int numbers()
{
return 3;
}
public double sal()
{
return 25000.00;
}
}
或者只是抛出 NotImplementedException;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.