오늘은 시험 날 !
거의 한달만에 java 복습 , 학원에서 못들었던 특강을 다시 듣고있는 중이다.
현재 메소드 오버라이딩에 대해서 보는중..
부모 와 자식 class 간 누가 더 큰 범위냐?
자식일 것 같지만 부모임. 부모가 모든 자식 class를 수용하고 있기 때문에.
오버라이딩 없으면 그냥 부모함수 사용
오버라이딩 되어있으면 자식class에서 설정한 내용이 입력되어
출력을 할 때 자식 class에서 덮어쓴 내용만 출력된다.
컴파일 시점 = 여기가 일단 먼저 , 기계어로 변환하는 과정 , 정적 바인딩
런타임 시점 = 프로그램 실제로 실행 시점 , 동적 바인딩
Nocasting : 객체 생성 시 자기 자신 참조
Upcasting : 하위 클래스의 객체를 상위 클래스 타입으로 변환 하는 것.
Downcasting : 상위 클래스 타입으로 캐스팅된 객체를 다시 원래의 하위 클래스 타입으로 변환하는 것.
상속받은 class에서 함수를 overriding을 해서 사용하려고 할 때 내용을 새로 덮어쓰는게 아닌, 기존 내용위에 내용을 추가해서 덮어쓰고 싶다면 super() 예약어를 사용해서 기존함수를 상속받아야한다.
예를 들어 ,
class Employee {
String name;
int age;
String adress;
public Employee(String name, int age, String adress) {
this.name = name;
this.age = age;
this.adress = adress;
}
void showInfo() {
System.out.println("이름 : " + this.name);
System.out.println("나이 : " + this.age);
System.out.println("주소 : " + this.adress);
}
이런 사장 클래스를 선언한후에 직원 클래스를 하나 만든다.
class Regular extends Employee {
float yearMoney;
public Regular(String name,int age,String adress,float yearMoney) {
super(name,age,adress);
this.yearMoney = yearMoney;
}
---------------------------------
@Override
void showInfo() {
super.showInfo();
System.out.println("연봉 : "+this.yearMoney);
}
} //이 부분에서 super()으로 위에 부모의 showInfo 함수를 상속받지 않으면
//내가 입력한 연봉의 결과만 출력이 되고 이름,나이,주소는 나오지 않는다.
이 부분에서 @Override 라는 부분은 “언옵테인” 이라고 해서 오버라이딩을 한다는것을 명시적으로 표시하는데 사용되는 목적이다. 이걸 사용함으로써 코드의 가독성을 높이고 오버라이딩을 한다는 의도를 명확히 표시할 수 있게 한다.
일단 상속을 받기 위해서는 super를 무조건 사용해야한다.
(알아보니 무조건은 아닌데 웬만해서는 그냥 super를 사용하는게 낫다 !)
class는 단일 상속
abstract :추상 클래스
추상 메서드도 생성 가능
interface 는 다중 상속 가능
중요개념 : upcasting , downcasting
implements : ?
'언어 > Java' 카테고리의 다른 글
생성자란? (0) | 2024.09.23 |
---|---|
Java 의 기본 . Class (0) | 2024.09.23 |
getter 와 setter 란? (0) | 2024.09.23 |
객체 지향프로그래밍이란? (0) | 2024.09.19 |
메소드 오버로딩(Overloading) , 오버라이딩(Overriding) (0) | 2024.09.19 |