Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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,我读到你可以为一个对象添加额外的方法,或者用这种方式重写抽象方法,但是我有一个错误。你能告诉我这是否可能,或者我做错了什么吗 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的基本部分