<abstract> => 클래스/메소드
abstract 메소드 - 선언부만 있고, 구현부 X
메소드 하나라도 abstract 면 클래스도 무조건 abstract
abstract class 도형{
abstract void 면적( ); //여기까지만 쓰는게 선언만 하는 것
public void ( ) { sout } } // 다른 일반 메소드 O
=> abstract 는 "상속" 해서 => 구현 해서 사용한다.
모든 abstract 메소드 구현이 필수 (overriding)
class 사각형 extends (abstract)도형{
@Override
void (abstract)면적 ( ) { 가로 * 세로 ; } }
여러개의 서로다른 클래스 내부에 필수적으로 구현해야할 공통메소드 정해놓는것 ( 필수구현 보장 )
(각자 필요에 따라서 실제적 구현은 따로 해라)
사각형 extends 도형
원 extends 도형
(혹은 협업할 때, 구현해야할 클래스가 많다. => 필수 공통메소드 서로 "약속" 해놓고
각자 필요에 맞게 구현한다. => 나중에 합칠 때, 메소드 명부터해서 어느정도 공통점을 갖게된다. )
- final abstract class
abstract final void m( ){ } ( X ) 모순 , 같이붙을 수 없는 modifier (대표적)
------------------------------------------------------------------
<super>
super - 상속하는 상위 객체 의미
super. 멤버변수 => 상위 멤버변수와 하위 멤버변수 구분-> 상위멤버변수를 가져옴
(this. 와 비교 => this 는 현재 클래스 )
class Employee { name = 회사원 }
class Manager extends Emplyee{ name = 관리직 }
void test( ) { String name = "지역변수";
sout (name); => 지역변수
sout (this. name); => 관리직 (현재 클래스의 멤버변수)
sout (super. name); } => 회사원 (super 클래스의 멤버변수)
이렇게 변수가 다있는게 아니라,
1. super 멤버변수만 있거나
2. this 멤버변수만 있거나
3. 지역변수만 있거나 할땐
이렇게 구별할 필요 없이, 그냥 name 때리면 알아서 찾아서 그 값을 가져온다.
( 2,3번 없으니까 1번 말하나보네. 이런식 )
여러개 똑같은 변수명 name 으로 있으면 this/super 써가면서 구별해서 사용한다.
< super. 메소드( ) >
=> 하위클래스 메소드 overriding 해서 상위클래서 그대로 재사용 + 추가 수정
void infor( ){ sout( id + name ) }
< 상속 >
void infor( ){ super.infor( ); //한방에 500코드도 가져오는거지
sout ( "추가" ) }
변경할꺼 없으면 그냥 상속했으니까 메소드 그대로 사용하면 됨
< 생성자와 super >
super( ); 상위 포함 기본 생성자 호출 // (항상 생략되어있는 것)
생성자 첫문장 super ( ) 자동호출해서 생략해놓은거
( 생략되어서 존재하고 있음을 인지하자 )
class A{
class A(String s) { } // 기본생성자가 아니라 파라미터 가진걸로 정의하면
// B에서도 super( ); 으로 A 생성자 호출해하는데 파라미터가
// 들어있는 생성자라서 호출이 안됨 - 오류
class B extends A{
// "명시적"으로 파라미터 맞춰서 super 해줘야함
super("string파라미터주기"); ( 가장 첫 문장으로 )
classX{
X (int a, intb ){ } } 파라미터 가진 생성자
<상속>
classY extends X {
Y(int a, int b) {super(a, b);} - 생성자 상속 땡겨오기
'Back to the Java' 카테고리의 다른 글
Interface 에 숨겨진 비밀 (0) | 2022.06.30 |
---|---|
A a1 = new B( ); 객체 형변환 , 자동 / 명시적 (0) | 2022.06.30 |
상속과 Override, 상속을 막는 final 메소드와 final 클래스. (0) | 2022.06.27 |
클래스 안의 클래스 Inner class <- Outer class 에게 허락을 맡아라 (0) | 2022.06.27 |
생성자 Constructor / vs GetterSetter / this (0) | 2022.06.24 |