如题,我在编写代码的时候明明添加了“@Override”的标注了啊,可是编译器仍然说无法覆盖Object的toString()方法,请教各位大侠有什么办法可以做到覆盖的?谢谢!!!

解决方案 »

  1.   

    代码贴出来了,如下public class AnimalInheritance {    public static void main(String[] args) {
         Spaniel aSpaniel=new Spaniel("Puppy");
         System.out.println("Here are the information of aSpaniel\n");
         System.out.println(aSpaniel.ToString());
         System.out.println("Before type casting, the class of aSpaniel is "+aSpaniel.getClass().getName());
         Animal anAnimal=(Animal)aSpaniel;//A
         System.out.println("After type casting, the class of aSpaniel is "+aSpaniel.getClass().getName());
         System.out.println("And the class of anAnimal is "+anAnimal.getClass().getName());
        }
    }
    class Animal{
    private String type;
    Animal(String tname){
    type=tname;
    }
    Animal(Animal ani){
    type=ani.type;
    }
    //@Override
    String toString(){      //B
    return "This is a "+type;
    }
    }class Dog extends Animal{
    protected String breed;
    protected String name;
    Dog(String br, String na){
    super("dog");
    breed=br;
    name=na;
    }
    Dog(Dog adog){
    super(adog);
    name=adog.name;
    breed=adog.breed;
    }
    Dog(String br){
    super("dog");
    breed=br;
    name="Unknown";
    }
    //@Override
    String toString(){     //C
    return super.toString()+"\nIt's a "+name+" the "+breed;
    }}class Spaniel extends Dog{
    Spaniel(String na){
    super("Spaniel");
    name=na;
    }
    Spaniel(Spaniel aSpa){
    super("Spaniel"); }
    //@Override
    String toString(){      //D
    return super.toString();
    }
    }B、C、D三行就是编译器提示出错的地方,另外我发现A行经过一个类型转换之后指向的对象还是Spaniel类型,请问大侠,如果这样做,类型转换还有什么意义?
      

  2.   

    明显是方法写错了......
    如果是eclipse,使用快捷键alt+shift+s,选择override/implement methods,找toString方法,会帮你自动生成好
      

  3.   

    是这里么?
    //@Override
    String toString(){ //C
    return super.toString()+"\nIt's a "+name+" the "+breed;
    }
    你这种写法修改了“可见度”,是不允许的,必须为:
    public String toString() {
      ......
    }