2017-02-22 44 views
-2

Пожалуйста, обратите внимание на следующие классы:Расширение класса/компилятора ошибки

public class Person { 
    public void whatAreYou(){ 
    System.out.println("Person"); 
    } 
} 

public class Student extends Person { 
    public void whatAreYou(){ 
    System.out.println("Student"); 
    } 
} 

Когда я пытаюсь позвонить,

Person p = new Student(); 
p.whatAreYou(); 

мой компилятор говорит мне:

error: cannot find symbol 

Я предполагаю, что это означает, что метод whatAreYou() здесь не найден, но я этого не понимаю. Должно быть разрешено писать Person p = new Student(), так как Student является расширением Person. Итак, когда мы вызываем p.whatAreYou() во время запуска программы, java должен вызывать метод whatAreYou() в классе Student. Но компилятор уже не принимает ссылку здесь, как кажется, хотя оба метода имеют одно и то же имя в своих отдельных классах.

Может кто-нибудь объяснить мне, почему это так?

+1

Показать полный код. –

+0

Повторно скомпилируйте весь проект и, возможно, очистите кэш вашей среды IDE. – Tom

+0

Нет полных кодов, это старый экзаменационный вопрос, и это все, что было дано нам. – Julian

ответ

0

Когда компилятор говорит: cannot find symbol, это означает, что класс или метод недоступен или не существует.

В этом случае, это IO класс, который касается, и вы должны заменить его на System.out, который выводится по умолчанию для Java программы

Ваш код должен быть:

public class Person { 
    public void whatAreYou(){ 
     System.out.println("Person"); 
    } 
} 

и

public class Student extends Person { 
    public void whatAreYou(){ 
     System.out.println("Student"); 
    } 
} 

и это будет работать прекрасно

0

Предполагая, что приведенный ниже код находится в Student.java, это работает так, как ожидалось.

class Person { 
    public void whatAreYou(){ 
    System.out.println("Person"); 
    } 
} 

public class Student extends Person { 
    public void whatAreYou(){ 
    System.out.println("Student"); 
    } 

    public static void main (String[] args) { 
    Person p = new Student(); 
    p.whatAreYou(); 
    } 
} 
+1

Это не отвечает на вопрос - это просто говорит, что на данный момент вопрос не имеет смысла. Это более подходит для комментариев. Я знаю, что вы не можете комментировать сейчас, но это не позволяет добавить ответ. –

+0

Пожалуйста, прочитайте эту мета-дискуссию о ответах «ваш код работает»: http://meta.stackoverflow.com/questions/277923/are-your-code-works-fine-for-me-answers-acceptable – Tom