다음과 같은 문제가 있습니다. 다형성 호출을 만들려고하는데 그 결과는 기본 클래스에 따라 값을 변경하는 변수에 따라 달라집니다. 그러나 다른 것들을 시도했지만 작동하지 않습니다. 무엇이 바뀌어야하는지 알려주세요.다형 호출은 변수에 따라 다릅니다.
가class Cycle{
private int w = 0;
public void move(){
System.out.println("Cycle moving");
}
public int wheels(Cycle c){
switch (c.w){
case 1: return 1;
case 2: return 2;
case 3: return 3;
default: return 0;
}
}
}
class Unicycle extends Cycle{
public int w = 1;
public void go(){
System.out.println("Unicycle go");
}
}
class Bicycle extends Cycle{
public int w = 2;
public void go(){
System.out.println("Bicycle go");
}
}
class Tricycle extends Cycle{
public int w = 3;
public void go(){
System.out.println("Tricycle go");
}
}
public class TestCycle {
public static void ride(Cycle c){
c.move();
int now = c.wheels(c);
System.out.println(now);
}
public static void main(String[] args){
Bicycle b = new Bicycle();
ride(b);
Unicycle u = new Unicycle();
ride(u);
Tricycle t = new Tricycle();
ride(t);
}
}
코드에 실제로 나쁜 점이 있습니다. 서브 클래스에서'int w'를 다시 선언하십시오. 변수를 숨기거나 숨기는 것입니다. 나는 언어의 디자이너가 왜 그것을 허용했는지 이해하지 못한다. – toto2
또한 3 개의 서브 클래스에'go' 메소드가 있다는 것이 이상하게 보입니다. 그들은'go' 메소드를 가진 무언가의 서브 클래스 여야합니다. – toto2
@ toto2'Cycle.w'가 private이기 때문에 그것은 작동합니다. 그래서 그것의 상속인들에게는 unacessible입니다. 따라서 그림자가 없습니다. – Viruzzo