Java 多态性:方法已更改,但参数值未更改
我运行了以下代码:Java 多态性:方法已更改,但参数值未更改,java,oop,polymorphism,Java,Oop,Polymorphism,我运行了以下代码: public class Cycling { public static void main(String[] args) { Cycle unicycle = new Unicycle(); System.out.println("Unicycle name: " + unicycle.name); unicycle.ride(); } } class
public class Cycling {
public static void main(String[] args) {
Cycle unicycle = new Unicycle();
System.out.println("Unicycle name: " + unicycle.name);
unicycle.ride();
}
}
class Cycle {
public String name = "cycle";
public void ride() {
System.out.println("Ride cycle!");
}
}
class Unicycle extends Cycle{
public String name = "unicycle";
public void ride() {
System.out.println("Ride unicycle!");
}
}
我期望这个输出:
public class Cycling {
public static void main(String[] args) {
Cycle unicycle = new Unicycle();
System.out.println("Unicycle name: " + unicycle.name);
unicycle.ride();
}
}
class Cycle {
public String name = "cycle";
public void ride() {
System.out.println("Ride cycle!");
}
}
class Unicycle extends Cycle{
public String name = "unicycle";
public void ride() {
System.out.println("Ride unicycle!");
}
}
独轮车名称:独轮车
骑独轮车
我得到了这个输出:
public class Cycling {
public static void main(String[] args) {
Cycle unicycle = new Unicycle();
System.out.println("Unicycle name: " + unicycle.name);
unicycle.ride();
}
}
class Cycle {
public String name = "cycle";
public void ride() {
System.out.println("Ride cycle!");
}
}
class Unicycle extends Cycle{
public String name = "unicycle";
public void ride() {
System.out.println("Ride unicycle!");
}
}
独轮车名称:单车
骑独轮车
方法已成功更改,但参数的值未更改。有人能解释一下为什么吗?你的方法是多态的,你的字段不是多态的——因为字段不是多态的 当前有两个同名字段,一个字段隐藏另一个字段。当您这样做时:
Cycle unicycle = new Unicycle();
Cycle
不知道Unicycle
类中的名称。因此,当您执行unicycle.name
时,它指的是Cycle
类中的一个
建议:永远把你的领域保密
像IntelliJ Idea这样的IDE会突出显示此错误。这是因为当您在子类中定义一个同名变量时,它将具有两个仅共享其名称的属性。这称为隐藏。如果要访问超类变量“name”的值,可以通过super.name
调用它
正如您所看到的,变量完全是自己处理的,它们也可以有完全不同的类型。这是编译时与运行时多态性的典型案例
编译器在编译时解析变量,但JVM在运行时解析方法。字段不是多态的unicycle.name
指的是Cycle
中的name
,因为它是通过Cycle
类型的表达式访问的。“建议:始终保持字段私有。”-我知道,但我公开了创建此示例的过程。@JakovKusić-好的,听起来不错。那么这个评论是给未来的读者的。