메소드 이름을 동일하게 사용하여 동일한 기능을 다양한 방식으로 제공할 수 있다.
매개 변수의 개수나 타입(유형)이 달라야 한다.
(반환(return) 타입은 오버로딩 구현에 아무런 영향이 없다)
중복된 이름의 메소드를 사용할 수 있는 방식, 매개 변수의 개수나 타입(유형)이 달라야 한다.
Overloading 클래스
동일한 print 메소드 생성하기
class Overloading(){
// 기준 메소드
void print(int a){
System.out.println(a);
}
// 메소드명 동일, 매개 변수 타입 다름
void print(String s){
System.out.println(s);
}
// 메소드명 동일, 매개 변수 개수 다름
void print(int a, int b){
System.out.println(a*b);
}
// 메소드명 동일, 매개 변수 타입,개수 다름
void print(String s, int a){
System.out.println(s+a);
}
}
Person 클래스
setInfo
로 메소드명은 같으나 String name
, int age
, String name, int age
로 매개변수가 각기 다르다.
class Person {
String name;
int age;
void setInfo(String name) {
this.name = name;
}
void setInfo(int age) {
this.age = age;
}
void setInfo(String name, int age) {
setInfo(name);
setInfo(age);
}
// 인스턴스 메서드
String getInfo() {
return String.format("내 이름은 %s이고 나이는 %d이다.", name, age);
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setInfo("마리아", 16);
System.out.println(person.getInfo());
}
}
// 결과 : 내 이름은 마리아이고 나이는 16이다.
Person 클래스
class Person {
String name;
String sex;
void setInfo(String name) {
System.out.println(name);
}
void setInfo(String sex) {
System.out.println(sex);
}
}
Main 클래스
person.setInfo("남성임")
이 String name
과 String sex
중 어떤 메서드를 호출하려는지 알 수가 없다.
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setInfo("남성임");
}
}
// 결과 : 오류 발생
중복된 이름의 생성자를 사용할 수 있는 방식, 매개 변수의 개수나 타입(유형)이 달라야 한다.
Person 클래스
생성자 명은 Person 으로 동일하지만, 각각 String name
, int age
, String name, int age
로 매개변수가 다르다.
class Person {
String name;
String sex;
int age;
Person(String name) {
this.name = name;
}
Person(int age) {
this.age = age;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person person1 = new Person("Ruby");
Person person2 = new Person(27);
Person person3 = new Person("Alice, 22");
Person 클래스
String A, int B
라는 동일한 자료형과 개수를 가진 매개변수가 선언되었다. new Person("여성임", 34)
가 Person(String name, int age)
를 호출한 것인지 Person(String sex, int age)
를 호출할 것인지 알 수 없다.
class Person {
String name;
String sex;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
Person(String sex, int age) {
this.sex = sex;
this.age = age;
}
}
Person person = new Person("여성임", 34);
상속받은 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 재정의하는 것 (private 제외)
메소드명, 매개 변수의 개수, 매개 변수 타입(유형)이 같아야한다.
Person 클래스
class Person{
void practice(){
System.out.println("Person 클래스의 practice() 메소드");
}
}
Student 클래스
Person 클래스를 상속받는다.
class Student extends Person(){
@Override
public void practice(){
System.out.println("Student 클래스의 practice() 메소드");
}
}
Main 클래스
Person, Student 클래스를 객체화하여 메소드 호출하기
public class test{
public static void main(String[] args){
Person p = new Person();
Student st = new Student();
p.practice();
st.practice();
}
}