java中添加方法时出错
我读到你可以为一个对象添加额外的方法,或者用这种方式重写抽象方法,但是我有一个错误。你能告诉我这是否可能,或者我做错了什么吗java中添加方法时出错,java,Java,我读到你可以为一个对象添加额外的方法,或者用这种方式重写抽象方法,但是我有一个错误。你能告诉我这是否可能,或者我做错了什么吗 public abstract class Pesti { public abstract void ud(); } public class EX2 { public static void main(String[] args) { Pesti p = new Pesti() { public void ud(
public abstract class Pesti {
public abstract void ud();
}
public class EX2 {
public static void main(String[] args) {
Pesti p = new Pesti() {
public void ud() {
System.out.println("Pestele este ud!");
}
public void inn() {
System.out.println("Innoata!");
}
};
p.ud();
p.inn();
}
}
它告诉我它找不到方法
inn
您正在做的是创建您的Pesti
的匿名子类。但是,由于p
变量的类型为Pesti
,因此只能调用Pesti
类(或其任何超类)中声明的方法。因此,您可以调用ud()
,但不能调用inn()
如果可以将p
转换为子类的类型,则可以调用inn()
,但由于这是一个匿名子类实例,因此无法转换为该类型
您可以在Pesti
中将inn()声明为抽象(或具体)方法。然后,您的代码将通过编译,并且将在匿名子类实例中执行此方法的实现
public abstract class Pesti {
public abstract void ud();
public abstract void inn();
}
您正在做的是为您的Pesti
创建一个匿名子类。但是,由于p
变量的类型为Pesti
,因此只能调用Pesti
类(或其任何超类)中声明的方法。因此,您可以调用ud()
,但不能调用inn()
如果可以将p
转换为子类的类型,则可以调用inn()
,但由于这是一个匿名子类实例,因此无法转换为该类型
您可以在Pesti
中将inn()声明为抽象(或具体)方法。然后,您的代码将通过编译,并且将在匿名子类实例中执行此方法的实现
public abstract class Pesti {
public abstract void ud();
public abstract void inn();
}
我想你需要看看这个,我不知道你想做什么,但是你不能实例化抽象类,你可以在我的链接中找到详细的描述,希望它能帮助你看这个,我不知道你想做什么,但是你不能实例化抽象类,你可以在我的链接中找到详细的描述,希望它能帮助您您将p
声明为Pesti
的实例,但尝试使用Pesti
中未定义的方法。将对象声明为抽象类时,只能使用该类中定义的方法。要使用inn()
方法,还必须在Pesti类中声明此方法。或者,您可以编写一个扩展Pesti
的类,该类实现inn()
方法,并将对象声明为扩展类。您声明p
为Pesti
的实例,但尝试使用Pesti
中未定义的方法。将对象声明为抽象类时,只能使用该类中定义的方法。要使用inn()
方法,还必须在Pesti类中声明此方法。或者,您可以编写一个扩展类Pesti
,该类实现inn()
方法,并将您的对象声明为扩展类。Pesti
是一个抽象类,只有一个方法(即抽象
):ud()
。因此,使用类型Pesti
声明的变量只能用于调用类(Pesti
的隐式超类)中的ud()
或任何方法p
是使用此类型声明的,因此尽管实际上是使用方法inn()
的实例,但此方法在声明类型为Pesti
的变量的上下文中不可用
也许您打算将inn()
方法添加到Pesti
中,因此所有实例都必须实现它:
public abstract class Pesti {
public abstract void ud();
public abstract void inn();
}
或者您根本不想使用匿名类,而是想使用可用的inn()
方法创建Pesti
的子类:
public class PestiImpl extends Pesti {
@Override
public void ud() {
System.out.println("Pestele este ud!");
}
public void inn() {
System.out.println("Innoata!");
}
}
(或者您可以在这两者之间有一个继承层;如果您有其他类似这样的类使用inn()
方法,但有些类不使用Pesti
方法,则可以使用inn()
方法将abstract
类扩展为Pesti
)
旁注:我强烈建议在适当的地方使用注释,以使代码更具可读性,并避免在试图重写方法时出现诸如打字错误之类的错误。您可以让大多数IDE自动插入它。Pesti
是一个abstract
类,只有一个方法(即abstract
):ud()
。因此,使用类型Pesti
声明的变量只能用于调用类(Pesti
的隐式超类)中的ud()
或任何方法p
是使用此类型声明的,因此尽管实际上是使用方法inn()
的实例,但此方法在声明类型为Pesti
的变量的上下文中不可用
也许您打算将inn()
方法添加到Pesti
中,因此所有实例都必须实现它:
public abstract class Pesti {
public abstract void ud();
public abstract void inn();
}
或者您根本不想使用匿名类,而是想使用可用的inn()
方法创建Pesti
的子类:
public class PestiImpl extends Pesti {
@Override
public void ud() {
System.out.println("Pestele este ud!");
}
public void inn() {
System.out.println("Innoata!");
}
}
(或者您可以在这两者之间有一个继承层;如果您有其他类似这样的类使用inn()
方法,但有些类不使用Pesti
方法,则可以使用inn()
方法将abstract
类扩展为Pesti
)
旁注:我强烈建议在适当的地方使用注释,以使代码更具可读性,并避免在试图重写方法时出现诸如打字错误之类的错误。您可以让大多数IDE自动插入它。虽然此链接可以回答问题,但最好包括answ的基本部分