<상속(inheritance)>
: 클래스의 재구현
: is~a 관계 => ~이다, 자식 is a 부모
cf) 인터페이스도 is~a 관계지만 상속X, 인터페이스는 상속의 짝퉁
1. 상속받는 클래스는 상속해주는 클래스의 생성자와 private를 제외한 모든 것을 상속받는다.
cf) 생성자는 new할 때만 나오는 거라, 생성자 Base Drived??????
2.
Super class : 상속해 주는 클래스(부모)
Sub class : 상속받는 클래스(자식)
3. 접근제한자 protected는 Sub class에서 접근이 가능하다
4. Sub class로 객체를 생성하면 Super class와 자신의 생성자를 모두 호출한다.
cf) 근데 여기서 기본생성자 자동 호출 - 클래스안에 생성자 1도 없어야 된다
1개라도 있을 경우 둘다 기본생성자 필요하다
↓
하지만 자식클래스에만 기본생성자 만들어도?? 둘다 생긴다!!★
자식생성자에 기본생성자를 만들면 자식 클래스 자기 것과 부모 것을 한꺼번에 메모리에 생성한다.
=> new 자식클래스 + 생성자 (2번 호출, 부모는 기본적으로 기본 생성자 호출)
super. 도 되고 this. 도 된다
하나의 공간안에 클래스가 두개 , 한 건물안에 집이 두채
생성자 호출되는 순서도 부모-자식
5. 다중상속을 할 수 없다.
cf) 주석 단축키: ctrl + /
ctrl 스페이스바 : 기본생성자 바로 생성
[형식]
class Sub클래스명 extends Super클래스명{ }
자식 부모
cf) 부모가한명: 단일 상속
private가 본인만이라서 protected하는것~!!!
protected: 나와 내 자식에게만
cf) 자식클래스의 범위가 더 크다 자식클래스가 바깥!!
★중요 => SuperTest bb = new SubTest(); <=부모=자식 참조!~!!!!
- SubTest 와 ChildTest는 관계 없음 그래서 변수명 같아도 아무 관계가 없음
- 메소드가 Override가 되면 참조값이 부모이건 자식이건 무조건 자식 메소드가 호출된다.
-> 오버라이드 하면 무조건 자식꺼만 불러낸다~!!!!!
<Override 메소드>
=> 메소드에서만 적용, 필드(변수)는 안되는거 매우 주의~!!!!!
그니까 계산은 오버라이드로계산하는데 출력값은 원래 필드가 나옴.
1. Super클래스와 Sub클래스에 똑같은 메소드가 존재 인자까지 다 똑같아야지!!
2. 모든 우선권은 Sub클래스가 갖는다.
3. Super, Sub 클래스의 접근제어자(Modifier)는 틀려도 되지만
Super보다 Sub클래스의 접근제어자(Modifier)가 더 커야한다. 서브가 더 커야됨 항상!!!
cf) Overload(=오버로딩) vs Override(=오버라이딩) 하나의 클래스 부모/자식 클래스 메소드명만같음 전부다똑같음(인자개수까지) 인수형 / 인수개수가 다름 modifier는 틀려도 된다 (단 자식 클래스가 더 커야 한다) cf) modifier: private < protected < public |
cf)
- @Override //개발 자의 실수를 막기 위해서 이 한줄에 오버라이드라고 알려주려고 것
- 오버라이드는 함수에 적용되는거지 필드에는 아니다
★ this 와 this()
1. this 는 자신의 클래스의 참조값을 갖고 있다
2. this() 는 Overload된 다른 생성자를 호출 할 수 있다.
3. this()는 생성자의 첫줄에 써야 한다
★ super 와 super()
1. super 는 부모클래스의 참조값을 갖고 있다.
2. super() 는 부모클래스의 생성자를 호출 할 수 있다.
3. super() 는 자식클래스의 생성자의 첫줄에 써야 한다.
다형성 파트
<결합도>
부모클래스는 리모콘이다
객체생성 => 1:1관계, 결합도 100%
상속을 하면서 결합도를 낮춘다?!
cf) 만능리모콘(다형성) 상속을 쓴다.
상속과 오버라이드가 전제조건이 되어야 다형성을 쓸 수 있다.
ex)
ShapeTest shape;
shape = new SamTest(); //만능리모콘, 다형성, (부모=자식)부모가 자식클래스 참조, 다형성
변수 자식클래스
shape = new SaTest();
...
<Object>
1. Java의 최상위(부모,조상) 클래스
2. Java의 모든 클래스는 Object로 부터 상속받는다
3. extends Object라고 직접 쓰지 않아도 된다
4. Object에서는 == , equals() 가 모두 참조값(reference) 만으로 비교한다.
단, String만이 equals()가 내용(문자열)을 비교한다
cf)
반대로 하면 업캐스팅
cf) 상수화(값변화불가,고정된값) : 무조건 대문자로 변수
ex) private final String JUNG = "11111";
'JAVA' 카테고리의 다른 글
210806(금) 자바 14일차 - 상속(Object, 추상클래스, 날짜같은거) (0) | 2021.08.06 |
---|---|
210805(목) 자바 13일차 - 상속(클래스형변환 , instanceof, Frame) / 색 / final(상수화) (0) | 2021.08.05 |
210803(화) 자바 11일차 - String / static / 메모리 (0) | 2021.08.03 |
210802(월) 자바 10일차 - heap / DTO... / 멤버숙제 / 초기화 / 리턴 / 생성자 / this / 스캐너 / varargs / 샐러리숙제 / 리터럴 (0) | 2021.08.02 |
210730(금) 자바 9일차 - 객체지향개념 / 클래스 / 메소드 / 오버로딩 / 객체배열 (0) | 2021.07.30 |