-
상속, Upcasting, Overriding, 다형성, DowncastingJava 2022. 1. 11. 00:01
1/ 상속 (is a 관계)
/* 1/ Parent class가 먼저 생성 2/ Child class가 그 다음 생성됨 */ class Customer{ //parent } class VIPCustomer{ //Child }
2/ Upcasting
Customer vc = new VIPCustomer();
- 생성은 child class인 VIPCustomer로 되지만, 저장은 parent class인 Customer 타입으로 저장.
3/ Overriding
child class에서 parent class에 있는 메서드를 그대로 가져다 써서 재정의함.
조건: return, name, parameter 동일해야함. 접근제어자는 상위클래스에서 정의한 것과 같거나 넓어야함.
Customer vc = new VIPCustomer(); vc.calcprice;
Customer에 있는 calcprice 메서드를 가져오지 않고 VIPCustomer에서 재정의(overriding)한 calcprice 매서드를 사용.
Virtual Method 4/ 다형성
하나의 parent 클래스를 상속 받는 child 클래스가 있는 경우
각 child 클래스마다 같은 이름의 서로 다른 메서드 재정의(overriding) >> 상위클래스에서 정의한 메소드는 숨겨지고, 하위에서 정의한 메소드 동작.
parent 클래스 타입으로 선언된 하나의 변수가
여러 instance(child 클래스)에 대입되어 다양한 결과 실행됨(다형성이 구현된다.)
class Animal { //parent class public void move() { System.out.println("동물은 움직입니다."); } } class Human extends Animal { //child class public void move() { System.out.println("사람은 두 발로 걷습니다."); } } class Tiger extends Animal { //child class public void move() { System.out.println("호랑이는 네 발로 뜁니다."); } } class Eagle extends Animal { //child class public void move() { System.out.println("독수리는 하늘을 날읍니다."); } } public class AnimalTest { public static void main(String[] args) { AnimalTest test = new AnimalTest(); //instance생성 test.move(new Human()); //test의 move실행, Animal animal = new Human(); test.move(new Tiger()); test.move(new Eagle()); } public void move(Animal animal) { animal.move(); //하나의 줄로 다양한 결과 구현 } }
5/ 은닉성
private으로 멤버변수 선언. getter와 setter로 접근
**객체지향언어 특징
1/ 상속 : 다중상속X
2/ 다형성
3/ 은닉성
'Java' 카테고리의 다른 글
HashMap, Thread (1/11) (0) 2022.01.11 Collection, Framework (1/10) (0) 2022.01.11 Abstract Class, Template, Interface (0) 2022.01.10 Array 배열 (0) 2022.01.10 클래스, object, instance (0) 2022.01.10