Ⅰ. 수업소개
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
}
}
출처 :
반응형
'개발(Web) > Web' 카테고리의 다른 글
[Eclipse] Could not delete C:/경로. May be locked by another process. (0) | 2021.01.28 |
---|---|
[Eclipse] 오류: 기본 클래스 (클래스명)을(를) 찾거나 로드할 수 없습니다. (0) | 2021.01.04 |
[Java] 생활코딩 JAVA 예외 (0) | 2020.12.30 |
[Java] 생활코딩 JAVA 객체 지향 프로그래밍 (0) | 2020.12.30 |
[Java] 생활코딩 JAVA method (0) | 2020.12.28 |