안드로이드, 자바/자바
다형성
sondiaa
2022. 4. 8. 22:58
다형성이란?
다양한 형태 또는 특성을 가진다는 의미
부모 클래스를 상속받은 자식 클래스의 인스턴스가 부모의 객체로도 사용되고 뿐만 아니라, 자식 클래스의 객체로도 사용될 수 있는 다양한 상황
즉, 하위 클래스의 인스턴스(객체)는 보다 위인 상위 클래스의 인스턴스(객체)로도 사용될 수 있다. 그러나 그 반대는 불가능하다.
자식 클래스로 인스턴스를 생성하고 타입을 부모로 하면 부모의 자원만 쓸 수 있다. 그러나 오버라이딩한 거는 자식의 메서드로 실행된다.
이때 자식의 메서드를 바로 호출하고 싶다면 -> 캐스트가 필요하다.
자식 클래스에서 오버라이딩된 부모 클래스의 원본 메서드를 호출하고 싶다면? -> super 사용
class Person{
private int age;
private String name;
Person() {}
Person(String name, int age)
{
this.name = name;
this.age = age;
}
void sss() {
System.out.println("hello Class Person");}
void who() {
System.out.println("저는 사람입니다");}
}
class Student extends Person{
private int grade;
Student(){}
Student(String name, int age, int grade){
super(name, age);
this.grade = grade;
}
void sss() {
System.out.println("hello Class Student");}
void who() {
System.out.println("저는 학생입니다");}
void isPerson(){
super.who();
}
void isGrade(){
System.out.printf("저는 %d반 입니다%n", grade);
}
}
public class Interfaceexam {
public static void main(String[] args)
{
Student s1 = new Student("mizuno", 22, 1);
s1.isGrade();
s1.sss();
s1.who();
// super 키워드를 사용하여 부모 클래스의 메서드 호출 가능
s1.isPerson();
// 캐스트를 통해서 하위 클래스의 자원에 접근
Person p1 = new Student("iphone", 10, 2);
p1.sss();
((Student) p1).isGrade();
}
}