문제
안녕하세요 저는 그냥 있는지 확인하려면 나는 이러한 개념을 옳습니다.과부하에서 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