새소식

java

상속

  • -

오버라이딩(overriding): 부모 클래스의 메소드를 재정의 하는것

오버로딩(overloading): 동일 클래스내의 동일 메소드에 매개변수(parameter) 등을 추가(과적), 상속과 관련 없음(부모 자식 어디서든지 가능)

class Cal{
    public int sum(int v1,int v2){
        return this.v1+v2;
    }
}
class Cal3 extends Cal{
    public int minus(int v1, int v2){
        return v1-v2;
    }
    // 오버라이딩
    public int sum(int v1, int v2){
        System.out.println("cal3!!!")
        return v1+v2;
    }
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2,1);
        Cal3 c3 = new Cal3(2, 1);
        System.out.println(c3.sum()); // 3
        System.out.println(c3.minus()); // 1
    }
}

 

 

class Cal{
    public int sum(int v1, int v2){
        return this.v1+v2;
    }
    //오버로딩
     public int sum(int v1, int v2, int v3){
        return this.v1+v2+v3;
    }
}
class Cal3 extends Cal{
    public int minus(int v1, int v2){
        return v1-v2;
    }
    // 오버라이딩
    public int sum(int v1, int v2){
        System.out.println("cal3!!!")
        return v1+v2;
    }
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2,1);
        Cal3 c3 = new Cal3(2, 1);
        System.out.println(c3.sum()); // 3
        System.out.println(c3.minus()); // 1
    }
}

 

 

this: 자기 자신의 인스턴스, 현재 클래스 안의 개체를 가져오는 참조 변수

(예시: 부모, 자식 클래스에서 부모 클래스의 같은 변수가 있어도 this를 사용하여 자식 변수의 데이터를 가져옴)

 

super: 부모의(상속받는 class) 것을 뜻함, 자식 클래스에서 부모 클래스의 개체를 가져오는 참조 변수, 부모 클래스의 클래스 멤버 앞에 붙임

 

두 용어는 필드를 지칭할 때 사용.

 

class Cal{
    public int sum(int v1, int v2){
        return v1+v2;
    }
    // Overloading
    public int sum(int v1, int v2, int v3){
        return this.sum(v1,v2)+v3; // 오버로딩 전 작성된 기존의 cal클래스의 sum 메소드
    }
}
class Cal3 extends Cal{
    public int minus(int v1, int v2){
        return v1-v2;
    }
    // Overriding
    public int sum(int v1, int v2){
        System.out.println("Cal3!!");
        return super.sum(v1,v2); // 상속받는 cal 클래스의 sum 메소드를 칭함
    }
 
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2,1));
        System.out.println(c.sum(2,1,1));
 
        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2,1));
        System.out.println(c3.minus(2,1));
        System.out.println(c3.sum(2,1));
    }
}
class Cal2{
    public int sum(int v1, int v2){
        return v1+v2;
    }
    public int minus(int v1, int v2){
        return v1-v2;
    }
}

 

 

상속과 관련하여서 상속받은 부모클래스가 생성자가 있다면 자식 클래스는 반드시 그 생성자를 실행시켜야 한다!!

class Cal{
    int v1,v2;
    Cal(int v1, int v2){
        System.out.println("Cal init!!");
        this.v1 = v1; this.v2 = v2;
    }
    public int sum(){return this.v1+v2;}
}
class Cal3 extends Cal{
    Cal3(int v1, int v2) { 
        super(v1, v2); // 상속받은 Cal 클래스를 뜻함, 부모클래스의 생성자
        System.out.println("Cal3 init!!");
    }
    public int minus(){return this.v1-v2;}
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2,1);
        Cal3 c3 = new Cal3(2, 1);
        System.out.println(c3.sum()); // 3
        //c3은 Cal3의 인스턴스이며 상속받은 Cal클래스의 sum메소드에 (이때, this는 현재 만들어진 인스턴스를 뜻함) 인자값을 넘겨서 실행
        System.out.println(c3.minus()); // 1
    }
}

'java' 카테고리의 다른 글

Interface  (0) 2023.01.08
접근 제어자(access level modifier)  (0) 2023.01.08
생성자와 this (기초개념)  (0) 2023.01.08
Exception  (0) 2022.12.22
함수의 타입(추가 예정)  (0) 2022.12.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.