[JAVA] 오버라이딩(overriding), this와 super

seonjeong·2022년 12월 29일
0

Java

목록 보기
11/26
post-thumbnail

💖 오버라이딩(overriding)

상속받은 메서드를 자식클래스에서 고쳐 기입하는 것. 같은 사양(prototype)
override : ~위에 덮어쓰다(overwrite)

🔥 오버라이딩의 조건

자식클래스에서 오버라이딩하는 메서드는 부모클래스의 메서드와

  • 이름이 같아야 한다
  • 매개변수가 같아야 한다
  • 반환타입이 같아야 한다

예시

class Point {
	int x; 
    int y;
    
    String getLocation() {
    	return "x : " + x + ", y :" + y;	// -> x,y를 문자열로 반환
    }
}

class Point3D extends Point {
	int z;
    
    String getLocation() {	// 자신에 맞게 고쳐 반환하도록 오버라이딩
    	return "x : " + x + ", y :" + y + ", z : " + z;	
    }
}

🔥 오버로딩(overloading) vs 오버라이딩(overriding)

  • 오버로딩(overloading) : 기존에 없는 새로운 메서드를 정의하는 것(new)
  • 오버라이딩(overriding) : 상속받은 메서드의 내용을 변셩하는 것(change, modify)

예시

class Parent {
	void parentMethod() {}
}

class Child {
	void parentMethod() {}			// 오버라이딩
    void parentMethod(int i) {}		// 오버로딩
    
    void childMethod() {}			
    void childMethod(int i) {}		// 오버로딩
}

💖 this, super

🔥 this, this()

자기자신. 멤버변수와 지역변수의 이름이 같을 때 사용
생성자 간에서 서로 호출 가능

this()

: 생성자. 같은 클래스의 다른 생성자를 호출

this의 조건

  • 생성자의 이름으로 클래스이름 대신 this를 사용
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능

예시

public class Mainclass {
	public static void main(String[] args) {
    	MyClass clsOne = new MyClass();
        
        System.out.println(clsOne); // heap영역의 주소
		System.out.println(clsOne.getThis());
        
        clsOne.method();
	}
}    

class MyClass {
	String name;
    
    public MyClass() {
    	this("jhon");
        System.out.println("MyClass MyClass()");
    }
    
    public MyClass(String name) {
    	this.name = name;
        System.out.println("MyClass MyClass(String name) name = " + name);
    }
    
    MyClass getThis() {	// 0번째 매개변수로 모든 메서드에 추가되어 있다
    	return this;
    }
    
    void method() {
    	System.out.println(this);
        
        this.name = "일지매";
        this.getThis();
    }
    
    void setName(String name) {
    	// 멤버변수  매개변수
    	this.name = name;
    }
    
    void setNameMethod() {
    	String name = "홍길동";	// 지역변수
        this.name = name;
    }
}

// console
/*
MyClass MyClass(String name) name = jhon
MyClass MyClass()
MyClass@8efb846
MyClass@8efb846
MyClass@8efb846
*/

🔥 super, super()

자식클래스에서 부모클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수
상속받은 멤버와 자신의 멤버와 이름이 같을 때 사용
super대신 this사용 가능
부모클래스의 멤버와 자식클래스의 멤버가 중복 정의되어 서로 구별되어야하는 경우에 super사용

super()

: 생성자. 부모클래스의 생성자를 호출하는데 사용
: 부모클래스 멤버의 초기화 작업이 수행되어야 하기 때문에 자식클래스의 생성자에서 호출됨
: 상속관계를 거슬러 올라가며 계속 반복. 'Object()' 에서 끝 -> 최상위 부모 클래스

예시

public class Mainclass {
	public static void main(String[] args) {
    	Child c = new Child();
        c.method();
    }
}

class Parent {
	int x = 10;
}

class Child extends Parent {
	int x = 20;

	void method() {
    	System.out.println("x = " + x);
        System.out.println("this.x = " + this.x);
        System.out.println("super.x = " + super.x);
    }
}

// console
/*
x = 20
this.x = 20
super.x = 10
*/
profile
🦋개발 공부 기록🦋

0개의 댓글

관련 채용 정보