부스트코스 생활코딩 [쉽게 배우는 자바2] 공부 기록
1. 수업소개
class나 instance가 무엇인지는 알고 참여해야 한다.
package javaChapter2_11;
class Cal {
public int sum(int v1, int v2) {
return v1 + v2;
}
}
class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
}
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)); //c3 인스턴스에 sum 메소드를 호출해줘
}
}
class Cal2 {
public int sum(int v1, int v2) {
return v1 + v2;
}
public int minus(int v1, int v2) {
return v1 - v2;
}
}
상속
재사용성을 높이고, 유지보수의 편의성을 높이고, 가독성을 높이고, 코드의 양을 줄이는 목적 달성 !!
2. 기능의 개선과 발전
-부모클래스 (superclass)
-자식클래스 (subclass)
-재정의 (override)
package javaChapter2_11;
class Cal {
public int sum(int v1, int v2) {
return v1 + v2;
}
}
class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
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));
Cal3 c3 = new Cal3();
System.out.println(c3.sum(2, 1)); //c3 인스턴스에 sum 메소드를 호출해줘
System.out.println(c3.minus(2, 1));
System.out.println(c3.sum(2, 1));
}
}
부모클래스가 정의한 것을 자식클래스가 재정의할 수 있다!
그게 바로 overriding.
3. Overriding, Overloading
오버로딩은 상속과는 상관이 없다.
package javaChapter2_11;
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 { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
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)); //c3 인스턴스에 sum 메소드를 호출해줘
System.out.println(c3.minus(2, 1));
System.out.println(c3.sum(2, 1));
}
}
overloading은 같은 클래스 안에서는 이뤄질 수 없다.
상속 관계를 가진 클래스 사이에서 이뤄질 수 있다.
4. This Super
package javaChapter2_11;
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 { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
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);
}
}
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)); //c3 인스턴스에 sum 메소드를 호출해줘
System.out.println(c3.minus(2, 1));
System.out.println(c3.sum(2, 1));
}
}
this는 자기 자신
super는 부모 클래스
super를 이용해서 부모 클래스의 변수와 메소드에 접근 가능
5. 상속과 생성자
package javaChapter2_11;
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); // super는 부모 클래스의 생성자
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
}
}
6. 수업을 마치며
상속이나 오버라이딩, 오버로딩 등등
설명을 너무나도 잘 해주셔서 이해는 잘 된다.
다만 내가 실제 코드를 짰을 때, 그걸 내가 구현할 수 있나? 그건 다른 문제!
문득 이전에 낭비했던 내 시간들이 아깝다는 생각을 하게 된다.
다시 열심히 해야지.
300x250
'Language > JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 1~5 interface , 다형성 (0) | 2022.02.11 |
---|---|
[JSP] 'Dynamic Web Project' 프로젝트 생성 (0) | 2022.02.10 |
[JAVA] 객체지향 프로그래밍 7~9 생성자 this / 클래스화 인스턴스화 (0) | 2022.02.09 |
[JAVA] 객체지향 프로그래밍 4~6 class instance static (0) | 2022.02.08 |
[JAVA] 객체지향 프로그래밍 1~3 클래스, 인스턴스, 변수, 메소드 (0) | 2022.02.07 |