Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1697
- subporcess path
- regex_search
- centos pyhon 설치
- snmp
- CentOS7
- c3 step graph
- 정규식 문자열 출력
- selinux port 등록
- c++ 정규식
- 정규식 컴파일
- gcc regex
- linux시간으로 변경
- gcc 업데이트
- python popen
- snmp test
- telegraf
- python os
- semanage
- grafana dashboard
- c3 second
- 백준
- c3 초
- InfluxDB
- 정규식 활용
- influxdb 설치
- g++ 업데이트
- c3 축 없애기
- c3 축 가리기
- python subprocess
Archives
- Today
- Total
리셋 되지 말자
상속 본문
상속 : 재사용 + 확장
- 객체 지향에서의 상속은 '상속'이 아닌 '재사용과 확장'으로 이해해야 한다.
객체 지향에서의 상속
상위 클래스의 특성을 하위 클래스에서 상속(특성 상속)하고 거기에 더해 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미이다.
이를 고려하여 앞으로는 부모 클래스, 자식 클래스로 부르기보다는 상위 클래스, 하위 클래스 또는 슈퍼 클래스, 서브 ㅡㄹ래스라고 표현하기로 한다.
상위 클래스로 갈수록 추상화, 일반화 되었다고 하며 하위 클래스로 갈수록 구체화, 특수화 됐다고 말한다.
상속 관계에서 반드시 만족해야 하는 문장
- 하위 클래스는 상위 클래스다.
-> 포유류는 동물이다.
-> 고래는 포유류다.
-> 고래는 동물이다. - 나중에 학습할 객체 지향 설계 5원칙 가운데 LSP(리스코프 치환 원칙)을 나타내는 말이다.
자바에서의 상속 키워드
- 자바 언어에는 상속이라는 키워드 'inheritance'가 존재하지 않는다. 대신 extends(확장)이 존재한다.
상속 사용하기
- 객체 참조 변수의 이름은 신중히 결정해야 한다. 왜냐면 객체의 특성은 유일무이하기 때문에 이때문에 유일무이한 이름을 지어야 한다.(그렇다고 한다.)
- 동물
package inheritance01;
public class 동물 {
String myClass;
동물(){
myClass="동물";
}
void showMe() {
System.out.println(myClass);
}
}
- 포유류
package inheritance01;
public class 포유류 extends 동물{
포유류(){
myClass="포유류";
}
}
- 조류
package inheritance01;
public class 조류 extends 동물{
조류(){
myClass="조류";
}
}
- 고래
package inheritance01;
public class 고래 extends 포유류 {
고래(){
myClass="고래";
}
}
- 박쥐
package inheritance01;
public class 박쥐 extends 포유류{
박쥐()
myClass = "박쥐";
}
}
- 참새
package inheritance01;
public class 참새 extends 조류 {
참새(){
myClass = "참새";
}
}
- 펭귄
package inheritance01;
public class 펭귄 extends 조류{
펭귄(){
myClass="펭귄";
}
}
- main
package inheritance01;
public class Main {
public static void main(String[] args) {
동물 animal = new 동물();
포유류 mammalia = new 포유류();
조류 bird = new 조류();
고래 whale = new 고래();
박쥐 bat = new 박쥐();
참새 sparrow = new 참새();
펭귄 penguin = new 펭귄();
animal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
sparrow.showMe();
penguin.showMe();
}
}
- 결과
-> 상위 클래스에서만 showMe() 메서드를 구현하고, 모든 하위 클래스에서 showMe() 메서드를 사용할 수 있다.
"하위클래스는 상위클래스다"를 보여주는 main 코드
package inheritance01;
public class Main2 {
public static void main(String[] args) {
동물 animal = new 동물();
동물 mammalia = new 포유류();
동물 bird = new 조류();
동물 whale = new 고래();
동물 bat = new 박쥐();
동물 sparrow = new 참새();
동물 penguin = new 펭귄();
animal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
sparrow.showMe();
penguin.showMe();
}
}
- 위에서 "하위 클래스는 상위 클래스이다"라는 문장을 소개했는데, 위의 코드가 그것을 보여주는 예시이다.
-> 위 코드의 결과는 Main 클래스의 main 함수 결과와 같다. - 포유류는 동물이다. -> 맞는말
- 조류는 동물이다. -> 맞는말
상위클래스 배열로 여러 객체를 담는 코드
package inheritance01;
public class Main3 {
public static void main(String[] args) {
동물[] animals = new 동물[7];
animals[0] = new 동물();
animals[1] = new 포유류();
animals[2] = new 조류();
animals[3] = new 고래();
animals[4] = new 박쥐();
animals[5] = new 참새();
animals[6] = new 펭귄();
for(int i=0; i<animals.length; i++) {
animals[i].showMe();
}
}
}
클래스 상속 구조의 최상위 클래스인 Object
- 최상위 클래스가 Object이므로 모든 클래스는 결국 Object의 특성을 물려받는다. 그래서 어떤 클래스의 인스턴스이든 상관없이 우리는 toString() 메서드를 사용할 수 있다.
is a (x) is a kind of (o)
- 상속이 'is a'관계를 만족해야한다고 어디선가 주워들은 적이 있다. 이를 적용하면 '펭귄 is a 동물'인데 '펭귄은 한 마리의 동물이다.'가 된다.
- 위의 is a 보다는 is a kind of 를 적용하여, '펭귄은 동물의 한 분류다'로 이해하자.
중간 정리
- 객체 지향의 상속은 상위 클래스의 특성을 재사용하는 것이다.
- 객체 지향의 상속은 상위 클래스의 특성을 확장하는 것이다.
- 객체 지향의 상속은 is a kind of 관계를 만족해야 한다.
'Java(폐지) > Java 공부' 카테고리의 다른 글
상속과 T 메모리 (0) | 2020.07.16 |
---|---|
상속과 인터페이스 (0) | 2020.07.16 |
5일차-클래스 멤버 vs 객체 멤버 = static 멤버 vs 인스턴스 멤버 (0) | 2020.07.15 |
4일차 - 자바와 객체 지향 (0) | 2020.07.14 |
3일차 (0) | 2020.07.14 |
Comments