문제

안녕하세요 저는 그냥 있는지 확인하려면 나는 이러한 개념을 옳습니다.과부하에서 java 수 있다는 것을 의미합성자 또는 방법으로 다른 개수의 인수 또는 다른 데이터 유형이 있습니다.i.e

public void setValue(){
   this.value = 0;
}
public void setValue(int v){
   this.value = v;
}

는 방법에 대해 이 방법은?그것은 여전히 여겨 과부하기 때문에 반환하는 다른 데이터의 유형은?

public int setValue(){
   return this.value;
}

두 번째 질문입니다:무엇을 재정의 java?그것과 관련 유산입니다.자가 다음과 같다:

public class Vehicle{
  double basePrice = 20000;
  //constructor defined
  public double getPrice(){
     return basePrice;
   }
}

public class Truck extends Vehicle{
  double truckPrice = 14000;
  //constructor defined
  public double getPrice(){
     return truckPrice;
   }
}

그래서 지금 말하자 나는 다음과 같은

Truck truck = new Truck();

면 나는 전화

truck.super.getPrice()

이 반환하는 것 가격에서 차량 종류,20,000

면 나는 전화

truck.getPrice()

이 반환하는 것 가격에서 트럭스,14,000

내 지식에 대한 올바른 두 질문?

도움이 되었습니까?

해결책

당신은 기본적으로 정확합니다. 오버로드는 메소드가 동일한 이름을 가진 단일 클래스에서 여러 메소드를 갖습니다. 그러나 반환 값은 서명 방법의. 따라서 리턴 값 만 변경하여 메소드를 과부하 할 수 없습니다. 예에서 다음 코드를 가질 수 없습니다.

public void setValue() {
   this.value = 0;
}

public int setValue() {
   return this.value;
}

이것은 컴파일하지 못할 것입니다.

Rob이 식별 된 바와 같이, 나는 당신이 의미한다고 생각합니다 우선, 그리고 당신은 그것이 맞습니다. 참고 재정의를 사용하면 리턴 유형을 변경할 수 없습니다. Java 5 기준으로, 기본 클래스 메소드가 반환 한 파생 유형을 반환 할 수 있습니다. Java 5 이전에는 동일한 유형이어야합니다. 즉, Java 5 이후까지는 아래를 수행 할 수 없습니다.

public class AnimalNoise {}
public class Miaw extends AnimalNoise {}

public class Animal {
    public AnimalNoise makeNoise() {
        return new AnimalNoise();
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}

그러나 Java 5 이후에도 할 수 없습니다 다음을 수행하십시오.

public class Animal {
    public String makeNoise() {
        return "silence";
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}
public class Miaw {}

마지막으로, 오버로드와 재정의 사이의 큰 차이는 종종 간과되는 것입니다. 오버로드는 컴파일 시간에 결정되며 런타임에 재정의 결정이 결정된다는 것입니다. 이것은 런타임에 과부하가 결정될 것으로 예상 할 때 많은 사람들을 놀라게합니다.

다른 팁

옳은; 오버로드는 동일한 방법에 대해 여러 서명을 제공합니다.

"과거"가 의미하는 것은 기본 유형에서 상속 된 방법의 다른 구현을 제공하는 행위이며, 기본적으로 상속에 의한 다형성의 지점입니다.

public class Bicycle implements Vehicle {
    public void drive() { ... }
}

public class Motorcycle extends Bicycle {
    public void drive() {
        // Do motorcycle-specific driving here, overriding Bicycle.drive()
        // (we can still call the base method if it's useful to us here)
    }
}

당신이 무슨 설명이 올바른 것입니다.

에 대한 자세한 설명을 살펴 다형성의 개념입니다.키는 좋은 기사

http://en.wikipedia.org/wiki/Polymorphism#Computing

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top