-
[JAVA]java 오버로딩(overloading)과 java 오버라이딩(overriding)/java 다형성/java 다운캐스팅(downcasting)Languages/Java 2021. 2. 28. 20:15반응형
오버로딩과 오버라이딩
오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술이다
(쉽게 말해 이름이 똑같은 메서드가 여러개있는것. )
오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 상요한다.
(쉽게 말해 부모클래스것을 덮어서 썼다.)
오버라이딩
(+덧 붙이는 설명 : 동물이란 부모클래스안에 개라는 자식클래스를 만들고
eat()이 dog클래스의 객체에 대하여 호출되면 dog클래스 안의 eat이 호출
즉 dog의 eat()이 Animal의 eat()을 오버라이딩 한다)
부모클래스(Animal)
package inheitance; public class Animal { { System.out.println("동물이 먹고 있습니다"); } }
자식클래스(Dog)
package inheitance; public class Dog extends Animal { public void eat() { System.out.println("강아지가 먹고 있습니다."); } }
테스트 구현(DogTest)
package inheitance; public class DogTest { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); } }
실행결과
가상 매서드
프로그램에서 어떤 객체의 변수나 메서드의 참조는 그 타입에 따라 이루어진다
가상 메서드의 경우는 타입과 상관없이 실제 생성된 인스턴스의 메서드가 호출되는 원리다형성
하나의 코드가 여러가지 자료형으로 구현되어 실행되는 것
정보은닉 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
객체지향 프로그래밍 유연성,재활용성,유지보수성에 기본이 되는 특징이다다형성 구현하기
하나의 클래스를 상속 받은 여러 클래스가 있는 경우
각 클래스마다 같은 이름의 서로 다른 매서드를 재정의 한다
상위 클래스 타입으로 선언된 하나의 변수가 여러 인스턴스에 대입되어
다양한 구현이 실행될 수 있다
다형성 활용하기일반 고객과 vip고객의 중간 등급의 고객을 생성
5명의 고객을 arrayList에 생성하여 저장한 다음
각 고객이 물건을 샀을 때의 가격과 보너스 포인트를계산한다다형성 코딩실습
(+덧붙이는 설명 : 동물이란 클래스안에 사람,호랑이,새등이 상속되어 구현
한 클래스 안에 동물테스트를 같이 구현하여 실행값을 알아본다
이 때 한 클래스 안에 다형성이 실행되었다. )
package inheitance; class Animal{ public void move() { System.out.println("동물이 움직입니다"); } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다"); } } class Tiger extends Animal{ public void move() { System.out.println("호랑이가 네발로 뜁니다"); } } class Eagle extends Animal{ public void move() { System.out.println("독수리가 하늘을 날읍니다"); } } public class AnimalTest { public static void main(String[] args) { AnimalTest test = new AnimalTest(); test.moveAnimal(new Human()); test.moveAnimal(new Tiger()); test.moveAnimal(new Eagle()); //Animal animal = new Human(); } public void moveAnimal(Animal animal) {// 다형성이 구현되었다. animal.move(); } }
실행결과다운 캐스팅 - instnaceof
하위클래스가 상위클래스로 형 변환 되는 것은 묵시적으로 이루어진다
다시 원래 자료 형인 하위 클래스로 형 변환 하려면 명시적으로 다운 캐스팅을 해야한다
이때 원래 인스턴스의 타입을 체크하는 예약어가 instanceif이다package inheitance; class Animal{ public void move() { System.out.println("동물이 움직입니다"); } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다"); } public void readBook() { System.out.println("사람이 책을 읽습니다"); } } class Tiger extends Animal{ public void move() { System.out.println("호랑이가 네발로 뜁니다"); } public void hunting() { System.out.println("사냥을 할 수 있습니다"); } } class Eagle extends Animal{ public void move() { System.out.println("독수리가 하늘을 날읍니다"); } public void flying() { System.out.println("하늘을 날 수 있습니다"); } } public class AnimalTest { public static void main(String[] args) { AnimalTest test = new AnimalTest(); test.moveAnimal(new Human()); test.moveAnimal(new Tiger()); test.moveAnimal(new Eagle()); //Animal animal = new Human(); } public void moveAnimal(Animal animal) {// 다형성이 구현되었다. animal.move(); /*Human human = (Human)animal; human.readBook();컴파일링은 되나 */ if(animal instanceof Human) { //다운 캐스팅의 키워드 Human human = (Human)animal; human.readBook(); } else if(animal instanceof Tiger) { Tiger tiger = (Tiger)animal; tiger.hunting(); } else if(animal instanceof Eagle) { Eagle eagle = (Eagle)animal; eagle.flying(); } else { System.out.println("지원되지 않는 기능입니다"); } } }
실행결과
반응형'Languages > Java' 카테고리의 다른 글
[JAVA]java 인터페이스/인터페이스 구현과 형 변환/인터페이스와 다형성/인터페이스 상속 (0) 2021.03.08 [JAVA]java 추상 클래스/템플렛 매서드 (1) 2021.03.01 [JAVA]java 상속의 개념/상속과 접근 제어/super/묵시적 형 변환 (0) 2021.02.23 [JAVA]객체 배열, 배열 복사, 다차원 배열, arraylist (0) 2021.02.22 [JAVA]java 배열 (0) 2021.02.22