Java继承和对象转换

LAT*_*LAT 7 java inheritance

我对编程很新,我有一个问题请帮助我.(这个问题是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
Run Code Online (Sandbox Code Playgroud)

那说什么是p呢?

Har*_*ded 12

p 只是变量,它不会改变其中的Object的类型.

你可以想到一个杯子:你可以在其中加入任何液体,但杯子不会改变液体类型.

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!
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 9

p既是StudentPerson,但如果你调用一个方法(像whoAreYou()),Java将首先尝试找到它Student,然后在Person.


mau*_*ris 7

"我是学生"?

这称为动态绑定

  • Java没有*没有动态绑定.这只是动态调度.请参阅:http://stackoverflow.com/questions/533330/dynamic-dispatch-and-binding (2认同)

Mar*_*aux 5

我想我知道你的意思......

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");
    }

}
Run Code Online (Sandbox Code Playgroud)