Java/생활코딩

생활코딩 JAVA 상속

hs_developer 2022. 3. 17. 17:59

 

수업 소개

 

상속은 어떤 클래스가 있을 때 클래스가 가지고 있는 변수와 메소드를 확장해서 다른 클래스가 갖도록 하는 것이다. 

 

상속을 통해서 재사용성, 유지보수 편의성, 가독성을 높이고 코드 양을 줄인다.

 

 

// 상속

class Cal3 extends Cal {
	
}

 

 

// 전체 코드

class Cal {
    public int sum(int v1, int v2) {
        return v1+v2;
    }
}

class Cal3 extends Cal {
	
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2,1));
        
        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2,1));
    }
}

 

 

// 결과 값

3
3

 

 


 

기능의 개선과 발전

 

 

상속 받은 클래스에 기능을 추가하고 수정하는 방법을 살펴보자.

 

 

 

오버라이딩

부모 클래스가 가지고 있는 메소드 재정의 (덮어 쓰기)

 

// 상속

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;
	}
}

 

 

// 전체 코드

class Cal {
    public int sum(int v1, int v2) {
        return 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();
        System.out.println(c.sum(2,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));
    }
}

 

// 결과 값

3
Cal3!!
3
1
Cal3!!
3

 

 

 


 

Overriding vs Overloading

 

 

Overriding

부모 클래스의 기능 재정의

 

Overloading

클래스에 같은 이름의 메소드를 복수로 탑재

부모 클래스가 가지고 있지 않은 기능을 추가하면서 부모 클래스 중에 이름이 같은 것과 함께 공존하는 것

 

 

 

class Cal {
    public int sum(int v1, int v2) {
        return v1+v2;
    }
    
    // Overloading (상속과 상관 없음)
    public int sum(int v1, int v2, int v3) {
    	return v1+v2+v3;
    }
}

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 v1+v2;
	}
}

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));
    }
}

 

 


 

this & super

 

 

 

상속과 관련되어 굉장히 중요한 키워드

 

this 자기 자신 호출

super 부모 클래스 호출

 

 

 

 

상속은 부모 것을 그대로 물려받은 것이고

super은 부모 것을 가공해서 사용하거나 자식 것과 구별하기 위해서다.

 

 

원하는 대상을 정확하게 지정한다.

 

 

// 적용 전

class
Cal {
    public int sum(int v1, int v2) {
        return v1+v2;
    }
   
    // Overloading 
    public int sum(int v1, int v2, int v3) {
        return v1+v2+v3;
    }
}

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 v1+v2;
    }
}

 

// 적용 후

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;
    }
}

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);
    }
}

 

 

 

 


 

상속과 생성자

 

 

생성자가 있는 클래스를 상속할 때 상위 클래스의 생성자를 실행해야 한다. 방법을 알아보자.

 

 

 

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);
        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
        System.out.println(c3.minus()); // 1
    }
}  

 

// 결과 값

Cal init!!
Cal init!!
Cal3 init!!
3
1

 

 

 

이건 진짜 몇 번이고 다시 봐야할 듯...

'Java > 생활코딩' 카테고리의 다른 글

생활코딩 JAVA 객체 지향 프로그래밍  (0) 2022.03.16
메소드 Method  (0) 2022.03.16
생활코딩 JAVA 제어문  (0) 2022.03.15
인스턴스 Instance  (0) 2022.03.15
생활코딩 JAVA1  (0) 2022.03.06