자바기초(오버라이딩)

bitna's study note·2022년 4월 20일
0

자바

목록 보기
50/119

4월20일 내용정리

1.오버라이딩
부모의 것을 가져다가 내것으로 맞춰서 바꾸는것을 '오버라이딩'이라고한다.

2.object는 모든 클래스의 최고 조상으로 부모클래스는 object클래스 상속으로 기본적으로 받음

3.상속을 받은 자식은 부모타입으로 형변환 할수 있다.
이것이 '다형성'이다.
부모는 자식타입으로 형변환은 안됨.
자식은 부모가 될수 있지만, 부모는 자식의 자식이 앙대여
단, 오버라이딩은 자식이 우선권이 있어서 자식의 오버라이딩을 먼저가져다 씀.

*다형성의 형식
ParentRestaurant Parent=new BrotherRestaurant();

다형성 왜 쓰냐?? 부모타입으로 제한해서 쓰고싶을때, 부모가 각각 자식의 것을 보고싶을때
예를 들어 부모필드->4개 /자식필드->총 7개 (4개(상속부모필드)+3개(자식고유필드))
자식은 부모로 형변환해도 부모꺼 4개만 쓸수 있음.

단순하게 생각하면 자식의 객체주소값을 부모한테 다넘겨줄수 있으나,부모는 자식한테 모든 주소값을 넘겨줄수 없다.

형변환을 하면 부모는 자식의 객체를 참조하는데
부모한테 상속받은것에 해당하는것(자식의고유한 속성은 해당안됨)을 부모가 자식객체에 접근해서 볼수있다.

list에 있는 자식의 주소를 Customer부모가 주소를 넘겨받아 for문을 실행함.

고객정보출력(향상된 for문)
	for(Customer Cus:list) {
	 Cus.customerInfo();
	System.out.println();
	}
    

오버라이딩은 자식이 우선권이 있어서 자식의 오버라이딩을 먼저가져다 씀. 아래 예제 코드 참조

4.자신이 자신을 호출하는것 을 재귀호출
어떤 조건을 설정해주고 조건에 맞을때 까지 계속 자기자신을 호출하는것
Parent p =new Parent();
p.compute(5) //첫 호출

class Parent {
int compute(int num) {
if(num<=1)return num;
num-1
return compute(num); // num<=1 조건에 부합하지 않아 자기자신을 계속호출
}
}

package study_0420;
 /*아래 코드는 자식의 오버라이딩 과 재귀호출이 같이 쓴 예제코드이다.*/

class Parent {
	int compute(int num) {
		if(num<=1)return num;
		
		return compute(num-1)+compute(num-2);
	}
}

class Child extends Parent{
	
	@Override
	int compute(int num) {
		if(num<=1)return num;
		
		return compute(num-1)+compute(num-3);
	}
}

public class Exam{
	public static void main(String[] args) {
		Parent p =new Parent();
		System.out.println(p.compute(5));
		Parent p1= new Child(); //부모로 형변환
	}
}

부모는 자식으로 형변환 할수 없지만
아래와 같이
자식->부모타입으로 형변환->다시 자식타입으로 강제형변환은 가능하다.

Person p= new Person();
Student s=(Person)(Student());

5.instanceof 로 형변환이 가능한지 체크할수 있다.

package study_0420;

public class UpcastDemo {
	public static void main(String[] args) {

		Person p;  //======>이렇게도 형변환가능 1
		Student s= new Student();
		p=s; //p =(Person) s;  자식을 부모타입으로 형변환
		
//		Person p= new Student(); //======>이렇게도 형변환가능 2
		System.out.println(p.name);
		p.whoami(); //======> 만약 자식클래스에서 오버라이딩 하면  오버라이딩된 자식이 나옴
		
//		System.out.println(p.num);  ======>자식 고유의 것이므로 호출이 안됨
//		p.work();
		
		
		if(p instanceof Student) {
			System.out.println("가능");
		}else {
			System.out.println("불가능");
		}
		
		
		if(s instanceof Person) {
			System.out.println("가능");
		}else {
			System.out.println("불가능");
		}
		
		
	}
}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보