상속 : 어떤 클래스의 변수와 메소드를 다른 클래스가 물려 받을 수 있는 기능
만약, class Dog extends Animal 라고 상속문을 쓴다면
Dog is a Animal이라고 생각할 수 있음
Polymorphism & Inheritance - by animal
public class Animal {
String name;
String color;
public Animal(){}
public Animal (String name, String color) {
// this(); // 생성자
// this 포인터
if(name.length() == 0) {
this.name = "동물";
}
else {
this.name = name;
}
this.color = color;
}
void makeSound(){
System.out.println("동물" + name + "이(가) 소리를 냅니다.");
}
}
public class Dog extends Animal {
String size;
public Dog (){}
public Dog(String name, String color, String size) {
super(name, color);
this.size = size;
}
// 상위 클래스의 메서드 makeSound를 오버라이딩 했다.
// 기능 재정의 했다.
// Dog 타입의 객체들은 Animal클래스의 makeSound를 실행하지 않고
// 아래의 makeSound를 실행한다.
@Override
void makeSound(){
System.out.println(size + "견 " + name + "이(가) 멍멍 짖습니다.");
}
}
public class Cat extends Animal {
String eyecolor;
public Cat (){}
public Cat (String name, String color, String eyecolor){
super (name, color);
this.eyecolor = eyecolor;
}
@Override
void makeSound() {
System.out.println(eyecolor + " 눈을 가진 " + color + " 고양이 " + name + "가(이) 야옹하고 웁니다.");
}
}
public class Lion extends Cat{
Integer age;
public Lion (){}
public Lion (String name, String color, String size, Integer age){
super(name, color, size); // Cat 클래스 생성자
this.age = age;
}
}
Overriding (오버라이딩)
메소드 오버라이딩이란, 상속의 관계에 있는 클래스 간에 '완전 동일한 메소드'를 덮어쓴다는 의미. 오버라이딩은 이름과 반환형이 같으면서 매개변수의 개수와 타입까지 모두 같은 메소드간에 가능.
a폴더와 b폴더 안에 각각 Class가 생성된 경우
package : 클래스와 인터페이스의 집합, 목적에 따라 묶어서 관리
Class 가장 상단에 package명 선언
package a; // 어떤 폴더안에 들어있는지 명확하게 해주기 위해 표시
public class MyClass {
public void printInfo () {
System.out.println("a 패키지의 MyClass");
}
}
package b;
public class MyClass {
public void printInfo () {
System.out.println("b 패키지의 MyClass");
}
}