728x90
하나의 객체가 여러 가지 형태를 가질 수 있는 성질
다형성
상위 클래스 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것
class Friend {
public void friendInfo() {
System.out.println("나는 당신의 친구입니다.");
}
}
class BoyFriend extends Friend {
public void friendInfo() {
System.out.println("나는 당신의 남자친구입니다.");
}
}
class GirlFriend extends Friend {
public void friendInfo() {
System.out.println("나는 당신의 여자친구입니다.");
}
}
public class FriendTest {
public static void main(String[] args) {
Friend friend = new Friend(); // 객체 타입과 참조변수 타입의 일치 -> 가능
BoyFriend boyfriend = new BoyFriend();
Friend girlfriend = new GirlFriend(); // 상위클래스 타입으로 하위클래스 객체 참조 -> 가능
// GirlFriend friend1 = new Friend(); -> 하위클래스 타입으로 상위클래스 객체 참조 -> 불가능
friend.friendInfo();
boyfriend.friendInfo();
girlfriend.friendInfo();
}
}
// 출력
나는 당신의 친구입니다.
나는 당신의 남자친구입니다.
나는 당신의 여자친구입니다.
참조 변수의 타입 변환
사용할 수 있는 멤버의 개수를 조절하는 것
조건
- 서로 상속관계에 있는 상위 클래스 - 하위 클래스 사이에서만 타입 변환 가능
- 하위 클래스 타입에서 상위 클래스 타입으로의 변환(업 캐스팅)은 형 변환 연산자(괄호)를 생략 가능
- 상위 클래스 타입에서 하위 클래스 타입으로의 변환(다운캐스팅)은 형 변환 연산자(괄호)를 생략 불가
public class VehicleTest {
public static void main(String[] args) {
Car car = new Car();
Vehicle vehicle = (Vehicle) car; // 상위 클래스 Vehicle 타입으로 변환(생략 가능)
Car car2 = (Car) vehicle; // 하위 클래스 Car타입으로 변환(생략 불가능)
MotorBike motorBike = (MotorBike) car; // 상속관계가 아니므로 타입 변환 불가 -> 에러발생
}
}
class Vehicle {
String model;
String color;
int wheels;
void startEngine() {
System.out.println("시동 걸기");
}
void accelerate() {
System.out.println("속도 올리기");
}
void brake() {
System.out.println("브레이크!");
}
}
class Car extends Vehicle {
void giveRide() {
System.out.println("다른 사람 태우기");
}
}
class MotorBike extends Vehicle {
void performance() {
System.out.println("묘기 부리기");
}
}
instanceof 연산자
캐스팅이 가능한 지 여부를 boolean타입으로 확인할 수 있는 자바의 문법요소
참조_변수 instanceof 타입
public class InstanceOfExample {
public static void main(String[] args) {
Animal animal = new Animal();
System.out.println(animal instanceof Object); //true
System.out.println(animal instanceof Animal); //true
System.out.println(animal instanceof Bat); //false
Animal cat = new Cat();
System.out.println(cat instanceof Object); //true
System.out.println(cat instanceof Animal); //true
System.out.println(cat instanceof Cat); //true
System.out.println(cat instanceof Bat); //false
}
}
class Animal {};
class Bat extends Animal{};
class Cat extends Animal{};
728x90
'개발일지 > Java' 카테고리의 다른 글
Java 열거형 (Enum) (0) | 2022.09.13 |
---|---|
Java 추상화 (Abstraction) (0) | 2022.09.12 |
Java 캡슐화 (Encapsulation) (0) | 2022.09.12 |
Java 상속 ( Inheritance ) (0) | 2022.09.12 |
Java 지역 내부 클래스 (0) | 2022.09.09 |