오버로딩(Overloading)과 오버라이딩(Overriding)

  • 자바에서 다형성을 지원하는 방법으로 오버로딩과 오버라이딩이 있음

  • 오버로딩(Overloading): 매개변수의 유형과 개수를 다르게 함으로써 같은 이름의 메소드를 여러 개 가지게 하는 방법
  • 오버라이딩(Overriding): 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 방법

1. 오버로딩(Overloading)

  • 매개변수의 유형과 개수를 다르게 함으로써 같은 이름의 메소드를 여러 개 가지게 하는 방법
// 예제 1-1. Car.java
package com.jremind.exam01;

public class Car {
	String company = "Volvo";
	String model = "XC90";
	String color = "black";
	int horsePower = 175;

	Car(){}

	Car(String company){
		this.company = company;
	}

	Car(String company, String model){
		this(company);
		this.model = model;
	}

	Car(String company, String model, String color){
		this(company, model);
		this.color = color;
	}


	Car(String company, String model, String color, int horserPower){
		this(company, model, color);
		this.horsePower = horserPower;
	}

	void printFields() {
		System.out.println(this.company + " "+ this.model + " "+ this.color + " "+this.horsePower);

	}
}
package com.jremind.exam01;

public class CarMain {

	public static void main(String[] args) {
		Car myCar1 = new Car();
		myCar.printFields();

        Car myCar2 = new Car("Volvo");
		myCar2.printFields();

        Car myCar3 = new Car("Volvo", "x2");
		myCar3.printFields();

        Car myCar4 = new Car("Volvo", "x2", "Black");
		myCar4.printFields();

        Car myCar5 = new Car("Volvo", "x2", "Red", 170);
		myCar5.printFields();
	}

}

2. 오버라이딩(Overriding)

  • 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 방법
  • Bird와 Dog 클래스에서 Animal를 상속받아 자신에 맞게 sound() 메소드를 재정의 해줌
// 예제1-1. Animal.java
package com.jremind.exam03;

public abstract class Animal {
	public String kind;

	public void live() {
		System.out.println("먹고 찐다");
	}

	public abstract void sound();
}
// 예제1-2.Brid.java
package com.jremind.exam03;

public class Bird extends Animal{
	public Bird() {
		this.kind = "조류";
	}

	@Override
	public void sound() {
		// TODO Auto-generated method stub
		System.out.println("짹짹");

	}
}
// 예제1-3. Dog.java
package com.jremind.exam03;

public class Dog extends Animal{
	public Dog() {
		this.kind = "포유류";
	}

	@Override
	public void sound() {
		// TODO Auto-generated method stub
		System.out.println("멍멍");

	}
}
// 예제1-4. AnimalMain.java
package com.jremind.exam03;

public class AnimalMain {
	public static void main(String[] args) {
		Dog jindoDog = new Dog();
		Bird sparrow = new Bird();

		System.out.println(jindoDog.kind);
		System.out.println("---------------------");

		animalSound(new Dog());
		animalSound(new Bird());

	}

	public static void animalSound(Animal animal) {
		animal.sound();
	}

}