<상속>
"클래스"는 extends 클래스 단일상속만 가능 (두개 불가능)
"인터페이스"는 extends JpaReposit<Student, Long> , StudentReposit { }
동시 상속 가능
//클래스는 단일상속밖에 되지 않는 한계에 대해 해결책 - 면접질문
1. 객체화를 이용한다. 2. 인터페이스로 돌려서 이용한다.
< 다른 클래스를 가져다 쓰는 두가지 방법 >
1. 상속해서 사용
~이다 ( is ) 관계 => 상속을 사용
(ex. 학생은 사람이다 // 즉 완전한 포함관계)
2. 객체생성 해서 사용
가지다 (has) 관계=> 객체화 사용
즉, 특정 기능만 가져오고 싶을때!
(ex. 운전자는 자동차의 특정 기능만 가진다. O => 객체 O)
< 상속과 Override >
- 상,하위클래스 동일명 변수 존재하면 하위클래스(현재클래스)에서 선언된 변수가
우선적으로 적용된다. (Overriding) (지역변수 우선적용)
=> 근데, 상위클래스 변수를 사용하고 싶다면
1. super 사용
2. static 사용
같은 변수 상,하위클래스에서 둘다 static 선언
static 으로 주면 클래스 자체로 접근할수있으니까
classA.name / classB.name 이렇게 필요한걸로 사용할 수 있다.
< 메소드 overriding >
=> 상속 -> 상위메소드 그대로 사용 가능
=> 추가,변경해서 사용하고자 할때 overriding 사용 (다형성)
@Override
이름 / 파라미터 / 리턴타입 다 똑같이 하고
"실행 내용"만 수정.추가해서 사용 한다.
( modifier는 같거나 더 넓게만 변경 가능 - private<default<protected<public )
// 매개변수 바꿔서 overriding 하면 => 이건 overloading 으로 인식된다.
( @Override => 사전방지 가능 )
메소드 상속
@Override
public void emp( ){
super.emp( );
sout("추가기능") } // 이렇게 하면 새롭게 emp 가 정의됨 ( 상속한 클래스 내에서 )
재정의 할때, return super.sum( ); - 이런식으로 그대로 땡겨오면서 추가기능을 주는식으로 편하게 만들기 가능
< final 과 overriding >
=> final void method( ){ } 메소드에 붙이면 그 메소드 오버라이딩 불가능
=> final class{ } 클래스에 붙이면 그 클래스 상속불가능
- 상속 안되기 때문에, 그 클래스의 메소드들 전부 오버라이딩 못함
=> 객체 생성으로 메소드 가져와서 간접적으로는 오버라이딩 가능 ( 직접은 아니고 간접적으로 손댈 수있는 수준 )
final class Math{
int abs(int i){
if(i>=0){return i;}
else {return i * -1; } }
class MyMath {
Math m1 = new Math();
int abs(int i) {
return m1.abs(i) * -1; //객체로 메소드 가져와서 손보기 (아예 다시 정의하는건 X )
} }
<final 과 생성자 >
객체에서
private final addFee; 이렇게 못박아도
"생성자"에서 초기화하는거 딱 한번만 "인정"해준다.
public Student ( ~ ) {
this.addFee = Integer.parseInt(args[4]); }
생성자로 초기화해서 값을 줄 수 있다. => 생성자 이후로는 값 변경 불가. final 적용됨.
<자동 상속> Object class - (Root)
class A (extends java.lang.Object) => dafault 로 자동상속
class A{ i ;}
A( ){ i = 100; }
class B extends A{ (super( );) j; => super( ); 가 자동으로 생성(생략)되어있음
=> A( ) 생성자 자동 호출 => i = 100 이라는 A( ) 생성자를 자동호출하여 사용할 수 있다.
B( ){ j = 200; } }
( Class B 순서 : (1) <맨처음>A ( ) 생성자 호출 (2) j ; 선언 (3) B( ) 생성자 호출 )
B b1 = new B( ); < = 자동으로 new A( ); 도 생성
Object 객체생성 -> A 객체생성 -> B 객체생성
거슬러올라가서 맨 위에 super 까지 자동으로 생성
'Back to the Java' 카테고리의 다른 글
A a1 = new B( ); 객체 형변환 , 자동 / 명시적 (0) | 2022.06.30 |
---|---|
abstract 클래스-메소드 / super 메소드-생성자 (0) | 2022.06.27 |
클래스 안의 클래스 Inner class <- Outer class 에게 허락을 맡아라 (0) | 2022.06.27 |
생성자 Constructor / vs GetterSetter / this (0) | 2022.06.24 |
Modifier - 접근제어자 / static / final / +싱글톤 (0) | 2022.06.23 |