메소드 오버로딩(Overloading)
- 메서드 명을 중복하여 정의할 수 있음(Overload)
단, 중복하여 정의하기 위해서는 매개변수의 개수나 자료형이 달라야 함.
메소드 오버라이딩(Overriding)
- 상속 관계에 있을 때에 부모 클래스의 메소드가 자식 클래스에는 맞지 않아 재정의 하는 것을 말합니다.
- 재정의 시 메소드 이름, 매개변수의 개수, 자료형이 일치되게 재정의 해야합니다.
부모클래스 fly( )
public void fly() {
if(wings==true) {
System.out.println(color+"색 "+name+"이(가) 펄럭펄럭 ~");
}
else
{
System.out.println(color +"색 "+name+"이(가) 날수 없어요");
}
}
자식클래스 fly( ) 재정의
public void fly() {
System.out.println(color+"색 "+name+"이(가) 슝~");
}
자바에서 모든 클래스의 조상 클래스는 Object 클래스이다.
- 배열과 객체는 기본적으로 주소값을 가리키는 참조변수 이기때문에 == 비교 연산자 사용 불가능
- 부모 Object 클래스의 equals 를 재정의하여 비교해보자.
* 중요
Object p 매개변수를 (Box) 클래스로 타입캐스팅 하여 b 로 저장하는 것이 중요함.
Box 클래스에서 Object 클래스의 equals 함수 재정의
class Box{
double width;
double length;
double height;
public Box(double width, double length, double height) {
this.width = width;
this.length = length;
this.height = height;
}
public boolean equals(Object p) { //equals 함수를 재정의
boolean flag = false;
Box b = (Box)p; //매개 변수로 입력 받은 p를 비교할 Box으로 타입캐스팅 후 b로 저장
if(b.width==width && b.length==length && b.height == height) {
flag = true;
}
return flag;
}
}
Main 함수
public static void main(String[] args) {
Box b1 = new Box(10, 20, 30);
Box b2 = new Box(10, 20, 30);
if (b1.equals(b2)) {
System.out.println("같아요");
}
else {
System.out.println("달라요");
}
}
만일 객체를 바로 출력하면 주소 값이 바로 출력되는데 이때 사용되는 함수는 toString() 함수로 기본적으로 생략 되어져 있음
toString, equals
- 자바의 제일 조상인 Object의 메소드이며 필요하다면 자신의 클래스에 맞도록 재정의하여 사용할 것
toString() 오버라이딩 하는 경우
- 출력문에 객체를 표현하고자 할 때 사용
- toString 은 object의 주소를 그대로 출력
equals() 오버라이딩 하는 경우
- 서로의 동일한 속성값을 갖고있는지 판별하려면equals 메소드를 재정의하여 사용
- equals는 주소 값에 저장된 값이 같은지 비교
반응형
댓글