我试图扩展一个抽象类,它实现了一个接口方法,因此在我的子类中,我试图实现接口中声明的其余方法,但子类迫使我声明所有接口方法,请帮助我修复这个问题,谢谢我在下面添加了我的代码。谢谢大四的人。
我的代码
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 {
}发布于 2018-10-20 06:39:02
您只需要实现接口中尚未在抽象类中实现的方法,抽象类是您尝试实现方法的类的超类。
但看来我在你的考试课上看到了一个问题。
您的接口声明了此方法,
Double salary();在check类中实现此方法时,
public double sal()因此,这实际上并不是从接口实现方法。您需要使它与它在界面上相同。
就像这样在你的检查类中创建一个方法,
public Double salary()
{
return 25000.00;
}在实现/重写超类/接口中的方法时,您应该始终使用@重写注释,以便在任何方法签名不同的情况下,它将提示您在那里出错。是的,如果在子类检查中再次声明name()方法,它将覆盖抽象class.You中的方法,在类中可以这样做,
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";
}
}发布于 2018-10-20 06:39:16
扩展abstract类的具体类必须为超类中的所有抽象方法提供主体。
除非提供默认主体,否则接口中的方法默认为- abstract。
当抽象类实现接口时,接口的所有方法都继承为抽象。
现在,在您的场景中,您已经为接口的继承方法之一提供了一个主体,该方法在“抽象”类的范围内不再是抽象的。因此,如果一个类扩展了这个抽象类,那么它就不需要为上面的方法提供一个主体,因为它不再是抽象的(当然,他们可以重写它)。
您在Check子类中得到了一个错误,它是您为不继承salary()方法而定义的,而不是您已经在GetNames抽象类中定义的names()方法。
发布于 2018-10-20 07:13:37
您的GetNames类正在实现xxx接口,但是您只实现了name(),您必须实现工资方法。
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;
https://stackoverflow.com/questions/52903040
复制相似问题