yeahzzz
archive
yeahzzz
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • Language (41)
      • Python (12)
      • JAVA (21)
      • C&C++ (8)
    • Algorithms (25)
      • programmers (9)
      • study log (16)
    • Problems & Solutions (14)
    • Major (29)
      • Data Structure & Algorithm (14)
      • Linux(Ubuntu) (9)
      • Security (2)
      • Linear Algebra (4)
    • FE (44)
      • Web(HTML5, CSS, JS) (5)
      • React & TS (26)
      • 코딩일기 (10)
    • BE (1)
      • Node.js (1)
    • Pytorch (8)
    • Server (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzzz

archive

Language/JAVA

JAVA Inheritance

2021. 7. 28. 15:44

* Inheritance1 클래스를 상속하는 Inheritance2 클래스를 만들어보세.

 

<Inheritance1.java>

public class Inheritance1{

   String name;

   

   public void setName(String name){

         this.name = name;

   }

}

 

<Inheritance2. java>

public class Inheritance2(자식) extends Inheritance1(부모) {

 

}

 

클래스 상속을 위해서는 extends라는 키워드를 사용함. 

= 자식클래스 extends 부모클래스 

 

Inheritance2 클래스에 name이라는 객체 변수와 setName이라는 메소드를 만들지 않았지만 Inheritance1 클래스를 상속을 받았기 때문에 그대로 사용 가능. 


package day6;

public class Inheritance2 extends Inheritance{

public void sleep() {
System.out.println(this.name + " 언제끝나");
}

public static void main(String[] args) {

Inheritance2 Inheritance = new Inheritance2();
Inheritance.setName("코로롱");
System.out.println(Inheritance.name);
Inheritance.sleep();
   }
}

(출력값) 코로롱 언제끝나 


//Inheritance.java 파일만 있으면 따로 무언가를 하지 않아도 상속 가능함. 
//메소드 추가도 가능.   

보통 부모 클래스 (Inheritance)를 상속받은 자식클래스 (Inheritance2)는 
부모 클래스의 기능에 더하여 더 많은 기능을 갖도록 설계
Inheritance2 는 Inheritance를 상속받았으므로 Inheritance의 하위개념
이러한 관계를 자바에서는 IS-A 관계라고 라고 부른다

즉, Inheritance2 is a Inheritance

 

상속관계(=IS-A) 관계에 있을 때 자식객체는 부모 클래스의 자료형인 것처럼 사용 가능. 

-> Inheritance Inheritance2 = new Inheritance2();

반대는 불가능

 

여기서 조금 더 쉽게 이해하려면 Inheritance = Color , Inheritance2 = Blue 라고 생각해보자.

Color blue = new Blue(); // 파랑으로 만든 객체는 색깔 자료형이다 

Blue color = new Color(); // 색깔로 만든 객체는 파랑 자료형이다... 매우 모순적임.. 

*여기서 팁.. 코드 읽을 때 오른쪽부터 거꾸로 읽어주면 더 편함.


Method Overriding : 부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현 

 

package Inhertiance;

public class DeepBlue extends Blue {

public void sleep() {
System.out.println(this.name + " 짱 ㅎㅎ");
  }

public static void main(String[] args) {

DeepBlue deepBlue = new DeepBlue();
deepBlue.setName("진한 파랑");
deepBlue.sleep();
    }
}
//출력 : 진한 파랑 ㅎㅎ

하지만 진한 파랑ㅎㅎ 이 아니라 진한 파랑 짱ㅎㅎ 라고 출력하고 싶다면?
위처럼 sleep()메소드 수정해주면 됨. 
DeepBlue 클래스에 Blue 클래스와 동일한 형태 (입출력이 동일)의 sleep 메소드를 구현하면

DeepBlue클래스의 sleep메소드가 Blue 클래스의 sleep 메소드보다 더 높은 우선순위를 갖게되어 DeepBlue 클래스의 sleep 메소드가 호출됨.

우선순위 : DeepBlue >>>> Blue 


Method Overloading  : 입력항목이 다른 경우 동일한 이름의 메소드 만들 수 있음

package Inhertiance;

public class DeepBlue2 extends Blue {

public void sleep() {
System.out.println(this.name + " 짱 ㅎㅎ");
}

메소드 하나 더 추가해봅시다~ 여기서 중요한건 변경이 아니고 추가!!!임
public void sleep(int what) {
System.out.println(this.name + "짱 ㅎㅎ ㅎㅎ " + what + "인데요");
 }

 

이미 sleep이라는 메소드가 있지만 입력항목으로 int형 what이 추가됨. 
method overloading : 입력항목이 다른 경우 동일한 이름의 메소드 만들기 가능 

public static void main(String[] args) {

DeepBlue2 deepBlue = new DeepBlue2();
deepBlue.setName("진한 파랑");
deepBlue.sleep();
deepBlue.sleep(4);
  }
}
//출력값 : 진한 파랑 짱 ㅎㅎ ㅎㅎ 4인데요 
출력값 ㄹㅇ엉망이네 ㅋㅋㅋ 

 

 


0801 추가.

 

클래스 간의 상속?

클래스 간에는 부모-자식의 상속 관계를 설정

부모 클래스 A를 자식클래스 B가 상속받을 때 B는 A의 모든 멤버변수와 메서드를 자신의 것으로 상속받음(=마치 자기 것처럼 사용가능하다 이말이야)

 

상속 가능 여부

public&protected : 가능

private : 불가능 

자식 클래스 B는 부모클래스 A의 public, protected 기능을 직접적으로 코딩하지 않아도 자신의 것으로 사용 가능 

 

클래스 다이어그램을 통한 상속 표현

클래스의 구조를 표현하는 클래스 다이어그램에서 상속은 자식 클래스가 부모클래스를 가리키는 화살표로 표현

상속관계가 이루어질 때 부모클래스를 super 클래스라고 함. 

 

여러개의 클래스에서 공통되는 기능 추출하여 공유 가능. 

'Language > JAVA' 카테고리의 다른 글

클래스, getter그리고setter, 접근한정자  (0) 2021.08.01
Constructor  (0) 2021.07.29
Method  (0) 2021.07.27
클래스와 메소드  (0) 2021.07.27
method parameter, class, object  (0) 2021.07.27
    'Language/JAVA' 카테고리의 다른 글
    • 클래스, getter그리고setter, 접근한정자
    • Constructor
    • Method
    • 클래스와 메소드
    yeahzzz
    yeahzzz

    티스토리툴바