자바에서 다형성을 지원하는 방법으로 오버라이딩과 오버로딩이 있다.
같은 이름의 메서드를 지원하면서 매개변수의 유형과 개수가 다르도록 하는 기술
상위 클래스가 갖고 있던 메서드를 하위 클래스에서 재정의하여 사용하는 것
= 부모클래스의 메서드는 무시하고 자식클래스의 메서드 기능을 사용하겠다
class OverloadingTest{
//이름이 cat인 메소드
void cat(){
System.out.println("매개변수 없음");
}
void cat(int a, int b){
System.out.println("매개변수:"+a+","+b);
}
void cat(String c){
System.out.println("매개변수:"+c);
}
}
public class Overtest{
public static main(String[] args){
//OverloadingTest 객체 생성
OverloadingTest ot = new OverloadingTest();
ot.cat();
ot.cat(2,3);
ot.cat("hello");
이름이 cat인 메서드는 총 3개 있지만 매개변수 유형과 개수가 모두 다름을 확인 할 수 있다.
class Woman{
public String name;
public int age;
//info()메서드
public void info(){
System.out.println("여자의 이름은"+name+"이고, 나이는"+age+"입니다.");
}
}
class Job extends Woman{
String job;
public void info(){
System.out.println("여자의 직업은"+job+"입니다.");
}
}
public class OverridingTest{
public static main(String[] args){
Job job = new Job();
// 부모클래스를 상속받았으므로 자식클래스 내 별도 선언 없이 부모클래스 내 멤버변수에 접근 가능
job.name="유리";
job.age=20;
job.job="프로그래머";
// 호출
job.info();
//(중요) 실행결과 : 여자의 직업은 프로그래머입니다.
}
}
자식클래스에서 재정의한 것 + 원래 부모 클래스에서 정의되었던 것 모두 호출하고 싶다면 어떻게 해야할까. 아래 두 가지 방식이 있다.
class Job extends Woman{
String job;
public void info(){
System.out.println("여자의 이름은"+name+"이고, 나이는"+age+"입니다.");
System.out.println("여자의 직업은"+job+"입니다.");
}
class Job extends Woman{
String job;
public void info(){
super.info();
System.out.println("여자의 직업은"+job+"입니다.");
}