해당 게시물은 "생활코딩 - JAVA 상속" 유튜브 강의를 정리한 내용입니다.
또한, 프로그래머스 자바 입문 강의 내용을 정리하였습니다.
class가 인스턴스화 될때 생성자가 실행되면서 객체의 초기화를 한다. 그 때 자신의 생성자만 실행이 되는것이 아니고, 부모의 생성자부터 실행된다.
this는 현재 객체, 자기 자신을 나타낸다.
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을 실행한 뒤 v3 더하기 실행
}
}
// Cal 클래스가 갖고 있는 모든 변수와 메소드를 상속받음
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을 가르키게 됨
}
}
class Cal {
int v1;
int v2;
Cal(int v1, int v2){
this.v1 = v1;
this.v2 = v2;
}
}
class Cal3 extends Cal{
}
public class InheritanceApp{
public static void main(String[] args){
Cal c = new Cal(2,1);
Cal3 c3 = new Cal3();
}
}
➔ 자식은 반드시 부모의 생성자를 실행하게끔 강제되어 있기 때문
아래와 같이 고쳐줘야 함
class Cal {
int v1;
int v2;
Cal(int v1, int v2){
System.out.println("Cal3 상속받음");
this.v1 = v1;
this.v2 = v2;
}
}
class Cal3 extends Cal{
Cal3(int v1, int v2) {
super(v1, v2); // 부모클래스의 생성자임
System.out.println("Cal3 상속받음");
}
}
public class InheritanceApp{
public static void main(String[] args){
Cal c = new Cal(2,1);
Cal3 c3 = new Cal3(2,1);
}
}
class Cal {
int v1;
int v2;
Cal(int v1, int v2){
System.out.println("Cal3 상속받음");
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 상속받음");
}
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()); // Cal3에서는 sum이 없으므로 Cal에서 sum()찾음
System.out.println(c3.minus()); // Cal3에서는 miuns 있으므로, 자신이 가지고 있는 v1-v2 실행
}
}