개발(Web)/Web

[Java] 생활코딩 JAVA 상속

shinyelee 2021. 1. 1. 15:10

[생활코딩 JAVA 상속]

Ⅰ. 수업소개

package projectInheritance;

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

class Cal3 extends Cal { // Cal 클래스를 확장한다는 의미.
	// 변수와 메소드를 상속해 다른 클래스가 갖게 함.
	// -> 재사용성↑ 유지보수↑ 가독성↑ 코드양↓
}

public class InheritanceApp {

	public static void main(String[] args) {
		Cal c = new Cal();
		System.out.println("c : " + c.sum(2, 1));
		
		Cal c3 = new Cal3(); // Cal 클래스 상속됨.
		System.out.println("c3 : " + c3.sum(2, 1));
	}

}

class Cal2 {
	public int sum(int v1, int v2) { // Cal 클래스와 중복인 코드.
		return v1 + v2;
	}
	
	public int minus(int v1, int v2) {
		return v1 - v2;
	}
}


Ⅱ. 기능의 개선과 발전

package projectInheritance;

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

// 부모가 가지고 있는 기능을 재정의하는 것을
// -> 오버라이딩(Overriding)이라고 함.
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
    }
}


Ⅲ. Overriding vs Overloading

package projectInheritance;

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));
    }
}
class Cal2{
    public int sum(int v1, int v2){
        return v1+v2;
    }
    public int minus(int v1, int v2){
        return v1-v2;
    }
}


Ⅳ. this & super

package projectInheritance;

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;
    } // this는 자기 자신 내 메소드/필드 지칭(가독성↑).
}
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);
    } // super는 부모 클래스 내 메소드/필드 지칭(가독성↑).
 
}
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;
    }
}


Ⅴ. 상속과 생성자

package projectInheritance;

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

 

출처 : 

 

Java 상속 - 생활코딩

수업소개 이미 존재하는 클래스에 더 많은 기능을 넣고 싶은데 그 클래스를 수정하는 것이 가능하지 않다고요? 그렇다고 클래스를 복제하는 것은 유지보수가 어려워서 내키지 않는다고요? 그렇

opentutorials.org

반응형