상속은 기존의 클래스를 재사용하는 방법중의 하나이다. 상속은 다음과 같은 특징을 가진다.
- 부모 클래스로에서 정의된 필드와 메소드를 물려 받는다.
- 새로운 필드와 메소드를 추가할 수 있다.
- 부모 클래스스에서 물려받은 메소드를 수정할 수 있다.
상속의 형식은 다음과 같다. extends를 쓰면 된다.
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
상속의 예제를 써 보았다.
class Animal {
String name;
String color;
public Animal(String name, String color) {
this.name = name;
this.color = color;
}
public void cry(){
System.out.println(name + "is crying");
}
public void not_swim(){
System.out.println(name+" is not swimming");
}
}
class Dog extends Animal {
public Dog(String name, String color) {
super(name,color);
}
@Override
public void cry(){
System.out.println(name + " is barking");
}
public void swim(){System.out.println(name+" is swimming");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("코코","흰색");
dog.cry();
dog.swim();
Animal dog2 = new Dog("미미","점박이");
dog2.cry();
dog2.swim();//컴파일 에러
dog2.not_swim();
}
}
오버라이딩
오버라이딩은 상속받은 메소드의 내용을 변경하는 것이다
오버라이딩의 조건은 다음과 같다.
1.부모 클래스의 메소드와 매개변수가 같아야 한다.
2.부모 클래스의 메소드와 반환타입이 같아야 한다.
3.부모 클래스의 메소드와 이름이 같아야 한다.
위 예제에서 Animal 클래스와 Dog 클래스 모두 cry메소드가 들어있지만 Dog 클래스의 cry메소드가 실행이 된다. 이것을 오버라이딩이라고 한다.
오버로딩
오버로딩이란 한 클래스 내에 동일한 이름의 메소드를 여러개 정의하는 것이다.
오버로딩의 조건은 메소드의 이름이 동일해야 하고, 매개변수의 개수 혹은 타입이 달라야 한다.
다음은 오버로딩의 예제이다.
int add(int x, int y, int z) {
int result = x + y + z;
return result;
}
long add(int a, int b, long c) {
long result = a + b + c;
return result;
}
int add(int a, int b) {
int result = a + b;
return result;
}
오버로딩의 조건중에 매개변수의 개수 혹은 타입이 달라야 하는 이유는 당연한 말이겠지만 매개변수의 개수 혹은 타입이 같으면 기존의 메소드와 다를게 없기 때문이다. 그냥 기존의 메소드를 쓰면 된다.