클래스는 다른 클래스에게 상속받을 수 있다.
상속 받을 시, 부모 클래스의 타입을 사용할 수 있다.
class Animal {
String name;
public void cry(){
System.out.println(name + "is crying.");
}
// public Animal(String name) {
// this.name = name;
// }
}
class Dog extends Animal {
Dog(String name) {
this.name = name;
}
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 Animal();
dog2.name = "강쥐";
dog2.cry();
// doc2.swim(); 불가능!!
}
}
멤버 변수/함수나 클래스에 사용되어 외부에서의 접근을 제한한다.
private -> default -> protected -> public
private : 같은 클래스 내에서 접근 가능
default : 같은 패키지 내에서 접근 가능
protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
public : 접근 제한 없음.
super : 내가 상속받은 부모 클래스를 가리키는 키워드
추상클래스는 객체화 할 수 없다.
추상메소드 바디 { } 를 가질 수 없다.
abstract class Bird {
private int x, y, z;
void fly(int x, int y, int z) {
printlocation();
System.out.println("이동합니다.");
this.x = x;
this.y = y;
if (flyable(z)) {
this.z = z;
} else {
System.out.println("그 높이로는 날 수 없습니다.");
}
printlocation();
}
abstract boolean flyable(int z);
public void printlocation() {
System.out.println("현재 위치는 : " + x + "," + y + "," + z);
}
}
class Pigeon extends Bird {
@Override
boolean flyable(int z) {
return z < 10000;
}
}
class Peacock extends Bird {
@Override
boolean flyable(int z) {
return false;
}
}
public class Main {
public static void main(String[] args) {
// Bird b1 = new Bird();
Bird pigeon = new Pigeon();
Bird peacock = new Peacock();
System.out.println("비둘기 ::::");
pigeon.fly(1, 1, 3);
System.out.println("공작새::::");
peacock.fly(1, 1, 3);
System.out.println("비둘기 ::::");
pigeon.fly(3, 3, 20000);
}
}