Java_생활코딩-2021.11.09

Jonguk Kim·2021년 11월 9일
0

Java

목록 보기
5/7

1. 상속

  • 객체지향의 재활용성을 극대화시킨 프로그래밍 기법
  • 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능
  • 소스 변경 문제 또는 불필요한 기능 포함될 수도 있기 때문에 생김
  • 부모 클래스 / 상위(super) 클래스 / 기초(base) 클래스
  • 자식 클래스 / 하위(sub) 클래스 / 유도(derived) 클래스
  • 재활용성과 중복 제거, 유지보수 편리
  • 상속받은 클래스를 다시 상속 받을 수 있음
  • 복잡도가 증가됨
  • extends 사용
class MultiplicationableCalculator extends Calculator {
    public void multiplication() {
        System.out.println(this.left * this.right);
    }
}
 
public class CalculatorDemo2 {
 
    public static void main(String[] args) {
 
        MultiplicationableCalculator c1 = new MultiplicationableCalculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        c1.multiplication();
    }
 
}

2. 상속과 생성자

  • 매개변수가 있는 생성자가 있을 때는 자동으로 기본 생성자를 만들어주지 않음 (매개변수 없으면 자동으로 기본 생성자 만듦)
package org.opentutorials.javatutorials.Inheritance.example4;
public class ConstructorDemo {
    public ConstructorDemo(){}				// 1. 기본 생성자가 없으면 
    public ConstructorDemo(int param1) {}	// 2. 매개변수 있는 생성자를 사용 (위 기본 생성자 없으면 사용안함) 
    public static void main(String[] args) {
        ConstructorDemo  c = new ConstructorDemo();
    }
}
  • 하위 클래스가 호출될 때 자동으로 상위 클래스의 기본 생성자를 호출
  • 상위 클래스에 매개변수가 있는 생성자가 있다면 자바는 자동으로 상위 클래스의 기본 생성자를 만들어주지 않음
    => 존재하지 않는 생성자를 호출하게 되기 때문에 에러가 발생
    ==> 아래와 같이 상위 클래스에 기본 생성자를 추가
class Calculator {
    int left, right;
     
    public Calculator(){	// 추가
         
    }
     
    public Calculator(int left, int right){
        this.left = left;
        this.right = right;
    }
}
class SubstractionableCalculator extends Calculator {
    public SubstractionableCalculator(int left, int right) {	// 상위클래스 있으므로 불필요
        this.left = left;
        this.right = right;
    }
 
    public void substract() {
        System.out.println(this.left - this.right);
    }
}
  • super: 상위 클래스를 가리키는 키워드 (부모 클래스를 의미)
    • super(): 부모 클래스의 생성자를 의미
    • 부모 클래스의 기본 생성자가 없어져도 오류가 발생하지 않음
    • 하위 클래스의 생성자에서 super를 사용할 때 주의할 점은 super가 가장 먼저 나타나야함
      => 부모가 초기화되기 전에 자식이 초기화되는 일을 방지하기 위한 정책
class Calculator {
    int left, right;
     
    public Calculator(){}
     
    public Calculator(int left, int right){
        this.left = left;
        this.right = right;
    }
}
class SubstractionableCalculator extends Calculator {
    public SubstractionableCalculator(int left, int right) {
        super(left, right);
    }
 
    public void substract() {
        System.out.println(this.left - this.right);
    }
}

profile
개발일지

0개의 댓글

관련 채용 정보