2014-11-05 3 views
0

У меня возникают трудности при отладке этого кода. Я попробовал много альтернатив, чтобы избавиться от ошибки, но я не могу показать, что случилось, так как я новичок в Java.ОШИБКА: класс не абстрактный и не переопределяет абстрактный метод

public abstract class Animal { 

    private String name;  
    private String type; 

    public Animal(String name, String type) {  
     this.name = name; 
     this.type = type;  
    }  

    public String getName() {   
     return this.name; 
    } 

    public String getType() {   
     return this.type;  
    }   

    public abstract void speak(); 

} 



public class Dog extends Animal{ 


    public String getName() { 
     return super.getName();  } 

    public String getType() {  
     return super.getType(); } 

    public void speak(String name, String type){ 
     System.out.println("arf!");  } 

    } 


public class Ark{ 
    static void main(String[] args){ 

     Dog cookie = new Dog();   
     cookie.speak(); 

    } 
} 

Спасибо!

+1

Не могли бы вы опубликовать свою ошибку? – fxm

+1

Серьезно, не отступайте от своего кода! Поместите закрывающие скобки на следующие строки! – vefthym

ответ

2
public abstract void speak(); 

Вы должны осуществить это в Dog

Что вы реализовали

public void speak(String name, String type) 
{ System.out.println("arf!"); } 

Следовательно Dog является абстрактным, но вы не указали, что НИ вы реализовали speak()без параметров. Удалите параметры, так или иначе вы их не используете.

@Override 
public void speak() 
{ System.out.println("arf!"); } 
+0

Привет, большое вам спасибо за ответ! удалили параметры, и теперь сообщение об ошибке «конструктор» Animal in class Animal не может быть применен к данным типам: public class Dog extends Animal {« – Aly

+0

В классе животных есть параметризованный конструктор, поэтому, когда класс Dog расширяет его, компилятор вставляет super() (без аргументов), который вызывает конструктор по умолчанию суперкласса (Animal), которого у вас нет, следовательно, ошибка –

+0

Одним из решений является создание параметризованного конструктора для Dog. ** public Dog (имя строки, тип строки) { super (имя, тип); } ** –

0

Метод абстрактного слова не имеет тех же аргументов, что и у вашей реализованной Dog.speak (String String).

0

Вам необходимо переопределить метод Speak в классе Dog, изменить его

public void speak() 
{ 
    System.out.println("arf!"); 
} 
0
public abstract class Animal { 

    private String name;  
    private String type; 

    public Animal(String name, String type) {  
     this.name = name; 
     this.type = type; }  

    public String getName() {   
     return 
     this.name; } 

    public String getType() {  
     return this.type; }  

    public abstract void speak(String name, String type);  
// if you want parameters in the Dog class for this method you must include them here otherwise it wont work 
} 



public class Dog extends Animal{ 


    public String getName() { 
     return super.getName();  } 

    public String getType() {  
     return super.getType(); } 

    public void speak(String name, String type){ 
     System.out.println("arf!");  } 

} 
Смежные вопросы