Наследование Java и объектный бросок

Я довольно плохо знаком с программированием, у меня есть вопрос, помогите мне. (этим вопросом является вопрос о Java, но я не могу помнить синтаксис, но что я пишу, вот главным образом это.)

A class Person speaks "i am a person"
A class Student speaks "i am a student"
Student extends from Person
Person p = new Student

затем, что p говорит затем?

7
задан cuddlecheek 7 August 2016 в 20:54
поделиться

8 ответов

p - это просто переменная, она не меняет тип объекта, который в ней.

Вы можете представить себе чашку: вы можете налить в нее любую жидкость, но чашка не изменит тип жидкости.

abstract class Fluid{
  public String getTemp(){
    return "unknown";
  }
}
class Coffee extends Fluid{
  public String getTemp(){
    return "hot";
  }
}
class Cola extends Fluid{
  public String getTemp(){
    return "ice-cold"
  }
}

Fluid cup = new Coffee();
System.out.println(cup.getTemp()); //It's coffe in there, so it's hot!
12
ответ дан 6 December 2019 в 04:58
поделиться

Я бы сказал «я студент» . Это основной полиморфизм .

0
ответ дан 6 December 2019 в 04:58
поделиться

Если метод не является статическим, то метод Стьюдента будет вызываться, как упоминалось ранее. Только будьте осторожны, если метод speak является статическим, тогда будет вызван метод Person. Это называется сокрытием.

0
ответ дан 6 December 2019 в 04:58
поделиться
"i am a student" 

Это полиморфизм Java в действии. Метод speaks () определен в базовом классе Person и переопределен в производном классе ] Студент .

В Java базовый класс ссылка может ссылаться на объект производного класса, и когда переопределенный метод вызывается для такой ссылки, тип объекта, на который указана ссылка ссылается на определяет версию выполняемого метода.

4
ответ дан 6 December 2019 в 04:58
поделиться

Кажется, я понимаю, о чем вы...

p сказал бы, что он студент, потому что вы переопределите метод, в котором человек говорит. На Java это должно выглядеть так:

class Person
{
    public void speak()
    {
        System.out.println("I'm a person!");
    }
}

class Student extends Person
{
    @Override
    public void speak()
    {
        System.out.println("I'm a student");
    }

}
5
ответ дан 6 December 2019 в 04:58
поделиться

Несмотря на то, что ваша ссылка на p объявлена ​​как Person , p на самом деле является экземпляром Student . Следовательно, p будет «говорить» все, что говорит студент.

Допускается обращение к экземпляру Student как « Person », поскольку «Student наследуется от Person».

2
ответ дан 6 December 2019 в 04:58
поделиться

p одновременно является Студентом и Человеком , но если вы вызовете метод (например, whoAreYou () ), Java сначала попытается найдите его в Студент , а затем в Человек .

9
ответ дан 6 December 2019 в 04:58
поделиться

«Я студент»?

Это называется Динамическое связывание

7
ответ дан 6 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: