定义了一个抽象父类,这是其中的一个抽象方法public abstract void say();
子类Boy和Girl中的say方法分别是public void say(String content){
System.out.println(getName()+"用带有阳刚之气的声音对"+girlfriend.getName()+"说:"+content);
}public void say(String content){
System.out.println(getName()+"微笑着用甜美的声音对慕容紫英说:"+content);
}
此时报错,没有重写父类中的say方法。但是测试类中可以运行并且没问题。run中提示有错误但不影响运行。
求问:
抽象类的子类不是应该要重写父类中所有的抽象方法么,上面子类没有重写只是重载为啥不影响运行。。

解决方案 »

  1.   

    虽然不知道具体原因但我猜一下,希望有大神,详细解释
    编译没有报错,如果运行没有调用抽象方法也不会报错,应该是忽略了吧,看他的class文件里面有显示说存在问题,没有实现父类方法,但是为什么能通过编译就不知道了.
      

  2.   

    在cmd里确实过不了Test.java:14: 错误: Boy不是抽象的, 并且未覆盖Person中的抽象方法say()
    class Boy extends Person {
    ^
    Test.java:19: 错误: Girl不是抽象的, 并且未覆盖Person中的抽象方法say()
    class Girl extends Person {
    ^
    3 个错误在eclipse里面由于保存一次编译一次,之前可能有编译好的文件,如果有错误,eclipse会用上次编译通过的文件执行,其实最新的编译过不了的,在main方法中调用可能出现问题的代码,则会抛异常
      

  3.   

    因为你的抽象函数的say()是无参的,你覆盖只能覆盖无参的say(),你在子类里写了一个带参的say(String),函数签名不一样不算覆盖