4

我可以使这段代码在没有对象作为抽象方法的输入参数的情况下工作。例如,如果我printInformation()在 person 和 emp 中为该方法创建输入参数,因为printInformation(int x)它的工作原理。

当我将输入参数作为printInformation()方法的对象时,如下所示,它会引发错误

emp 不是抽象的,并且不会覆盖人员类中的抽象方法 printInformation(person) emp extends person{ ^

abstract class person{
 abstract void printInformation(person p);
}

class emp extends person{
 emp(){
  System.out.println("This is a emp constructor");
 }
 void printInformation(emp e){
  System.out.println("This is an emp");
 }
}

class entity{
 public static void main(String args[]){
  emp employeeObject = new emp();
  employeeObject.printInformation(employeeObject);
 }
}
4

2 回答 2

4

你的界面有一个这样定义的函数:

void printInformation(person p);

你的类有一个这样定义的函数:

void printInformation(emp e);

这些不是相同的功能。Java 认为第二个是新的重载方法,而不是接口中方法的实现。由于该类emp未声明为抽象类,但未提供抽象方法的实现void printInformation(person),因此是错误的。

于 2012-07-20T02:21:44.167 回答
3

我会做这样的事情:

interface PrintsInformation<T> {
    void printInformation( T t );
}

class Emp implements PrintsInformation<Emp> {
    public void printInformation( Emp e ) {
        System.out.println( "This is an emp" );
    }
}

public static void main( String[] args ) {
    Emp employeeObject = new Emp();
    employeeObject.printInformation( employeeObject ); // compiles
}

解决问题的另一种方法是,如果对象本身正在打印,则不要传入该对象。
只需这样做:

    public void printInformation() {
        // print "this" object, rather than the one passed in
        System.out.println( "This is an emp" );
    }
于 2012-07-20T02:28:33.400 回答