728x90

<상속(inheritance)>

클래스의 재구현

: is~a 관계  => ~이다, 자식 is a 부모

cf) 인터페이스도 is~a 관계지만 상속X, 인터페이스는 상속의 짝퉁

 

 

1. 상속받는 클래스는 상속해주는 클래스의 생성자private를 제외한 모든 것을 상속받는다.

cf) 생성자는 new할 때만 나오는 거라, 생성자 Base Drived??????

 

2.

Super class : 상속해 주는 클래스(부모)

Sub class : 상속받는 클래스(자식)

 

3. 접근제한자 protectedSub class에서 접근이 가능하다

 

4. Sub class로 객체를 생성하면 Super class와 자신의 생성자를 모두 호출한다.

cf) 근데 여기서 기본생성자 자동 호출 - 클래스안에 생성자 1도 없어야 된다

1개라도 있을 경우 둘다 기본생성자 필요하다 

하지만 자식클래스에만 기본생성자 만들어도?? 둘다 생긴다!!★

자식생성자에 기본생성자를 만들면 자식 클래스 자기 것과 부모 것을 한꺼번에 메모리에 생성한다.

=> new 자식클래스 + 생성자 (2번 호출, 부모는 기본적으로 기본 생성자 호출)

 

super. 도 되고 this. 도 된다

하나의 공간안에 클래스가 두개 , 한 건물안에 집이 두채

생성자 호출되는 순서도 부모-자식

 

 

5. 다중상속을 할 수 없다.

 

cf) 주석 단축키: ctrl + /

ctrl 스페이스바 : 기본생성자 바로 생성

 

[형식]

class Sub클래스명 extends Super클래스명{ }

          자식                           부모

 

단일상속 2개 예시 끝에 다중상속은 자바에선 불가 C쪽에선 이게 많이 어려움

 

cf) 부모가한명: 단일 상속

 

private가 본인만이라서 protected하는것~!!!

protected: 나와 내 자식에게만

 

cf) 자식클래스의 범위가 더 크다 자식클래스가 바깥!!

슈퍼테스트만 참조하면 output() 은 못불러냄 disp()만 가능

★중요 => 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 //개발 자의 실수를 막기 위해서 이 한줄에 오버라이드라고 알려주려고 것

- 오버라이드는 함수에 적용되는거지 필드에는 아니다

 

이건 그냥 참고 ShapeMain 예제 그림

 

 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)

반대로 하면 업캐스팅

참고 TestMain2 예제

cf) 상수화(값변화불가,고정된값) : 무조건 대문자로 변수

ex) private final String JUNG = "11111";

728x90

+ Recent posts