Я довольно плохо знаком с программированием, у меня есть вопрос, помогите мне. (этим вопросом является вопрос о 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 говорит затем?
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!
Если метод не является статическим, то метод Стьюдента будет вызываться, как упоминалось ранее. Только будьте осторожны, если метод speak является статическим, тогда будет вызван метод Person. Это называется сокрытием.
"i am a student"
Это полиморфизм
Java в действии. Метод speaks ()
определен в базовом
классе Person
и переопределен
в производном
классе ] Студент
.
В Java базовый класс ссылка
может ссылаться на объект производного класса, и когда переопределенный метод вызывается для такой ссылки, тип
объекта, на который указана ссылка ссылается на определяет версию выполняемого метода.
Кажется, я понимаю, о чем вы...
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");
}
}
Несмотря на то, что ваша ссылка на p
объявлена как Person
, p
на самом деле является экземпляром Student
. Следовательно, p
будет «говорить» все, что говорит студент.
Допускается обращение к экземпляру Student
как « Person
», поскольку «Student наследуется от Person».
p
одновременно является Студентом
и Человеком
, но если вы вызовете метод (например, whoAreYou ()
), Java сначала попытается найдите его в Студент
, а затем в Человек
.