public interface PersonDao() {
   public List queryAll();
}
public class PersonDaoImp() {
   public List<Person> queryAll() {
      return new List();
   }
}这样算是重写了PersonDao里的方法了?重写方法时不是要ctrl+c,ctrl+v么

解决方案 »

  1.   

    public class PersonDao() {
       public List<Person> queryAll() {
          
       }
    }public class PersonDaoImp extends PersonDao {
       public List<Person> queryAll() {
          return new List();
       }
    }这叫重写!
      

  2.   

    是重写了,由于泛型擦除运行的时候List<Person>被擦除成它的原生类型,所以说这两个方法的签名是一样的
      

  3.   


    public interface PersonDao() {
       public List queryAll();
    }
    public class PersonDaoImp() implements PersonDao{
       public List<Person> queryAll() {
          return new List();
       }
    }忘写implements了本来是想问楼上说的擦除问题,现在迷惑了实现接口方法不叫重写么,继承才叫重写?
      

  4.   

    接口里的方法都是abstract的,实现接口就要它的那些方法,何谈重写呢,本来原来的方法就是空的,要重写必须是继承关系
      

  5.   

    谢谢,帮我理清了一个概念问题,因为多态需要继承,重写,父类引用指向子类对象,有时候用接口引用指向实现类对象完成多态,所以一直以为 implements 和 extends 差不多,实现方法就是重写方法
      

  6.   

    你的代码问题太多  我先给你改成正确的
    class Person {
    }interface PersonDao {
    public List queryAll();
    }class PersonDaoImp implements PersonDao {
    @Override
    public List<Person> queryAll() {
    return new ArrayList();
    }
    }
    我加了 @Override 编译能通过 说明这是重写 原因是java的泛型用的是是擦除法
    至于什么是擦除法 上网搜
      

  7.   


    public interface PersonDao() {
       public List queryAll();
    }
    public class PersonDaoImp() {
       public List<Person> queryAll() {
          return new List();
       }
    }你的代码叫似不想 两个类根本就没有任何关系