package inheritance.checkpoint.car;
public class Car {
private String name;
private int fuelPercent;
public Car(String name, int fuelPercent) {
this.name = name;
this.fuelPercent = fuelPercent;
}
public String getName() {
return name;
}
public int getFuelPercent() {
return fuelPercent;
}
public void setFuelPercent(int fuelPercent) {
this.fuelPercent = fuelPercent;
}
public void on() {
System.out.println(name + "에 시동을 겁니다.");
}
public void go() {
System.out.println("부릉부릉");
}
public void off() {
System.out.println("시동을 끕니다.");
}
}
package inheritance.checkpoint.person;
import inheritance.checkpoint.car.Car;
public class Person {
private String name;
private Car car;
public Person(String name, Car car) {
this.name = name;
this.car = car;
}
public String getName() {
return name;
}
public Car getCar() {
return car;
}
public void sleep() {
System.out.printf("%s이(가) 잠을 잡니다.\n", name);
System.out.println("쿨쿨쿨...zzZ");
}
public void eat() {
System.out.printf("%s이(가) 밥을 먹습니다. \n", name);
System.out.println("여유롭게 냠냠냠");
}
public void introduce() {
System.out.printf("안녕하세요, 저는 %s입니다. \n", name);
}
public void drive() {
if (getFuelPercent() <= 0) {
System.out.println("연료가 부족하여 시동을 걸 수 없습니다.");
}
else {
on();
go();
off();
}
}
package inheritance.checkpoint.car;
public class Car {
private String name;
private int fuelPercent;
public Car(String name, int fuelPercent) {
this.name = name;
this.fuelPercent = fuelPercent;
}
public String getName() {
return name;
}
public int getFuelPercent() {
return fuelPercent;
}
public void setFuelPercent(int fuelPercent) {
this.fuelPercent = fuelPercent;
}
private void on() {
System.out.println(name + "에 시동을 겁니다.");
}
private void go() {
System.out.println("부릉부릉");
}
private void off() {
System.out.println("시동을 끕니다.");
}
public void operate() {
if (getFuelPercent() <= 0) {
System.out.println("연료가 부족하여 시동을 걸 수 없습니다.");
}
else {
on();
go();
off();
}
}
}
package inheritance.checkpoint.person;
import inheritance.checkpoint.car.Car;
public class Person {
private String name;
private Car car;
public Person(String name, Car car) {
this.name = name;
this.car = car;
}
public String getName() {
return name;
}
public Car getCar() {
return car;
}
public void sleep() {
System.out.printf("%s이(가) 잠을 잡니다.\n", name);
System.out.println("쿨쿨쿨...zzZ");
}
public void eat() {
System.out.printf("%s이(가) 밥을 먹습니다. \n", name);
System.out.println("여유롭게 냠냠냠");
}
public void introduce() {
System.out.printf("안녕하세요, 저는 %s입니다. \n", name);
}
public void drive() {
car.operate();
}
}
public abstract class Person{
public static void main(String[] args) {
public abstract void hyodo();
}
}
public class Programmer extends Person {
@Override // 컴파일러한테 알려주는 어노테이션
public void hyodo() {
System.out.println("부모님께 노래 불러드리기");
}
}
인스턴스 생성할일 없이 오직 상속만을 위한 클래스
import는 상위클래스 입력시 자동으로 패키지 밑에 import문으로 삽입됨
하위클래스에서 추상메서드가 없을 경우 경고문이 뜬다
'추상메서드를 구현한다'라고 표현한다
거의 오직 추상클래스를 정의하기 위해 만들어진 것
인터페이스는 추상메서드만 보유할 수 있다
인터페이스는 구현이라는 용어를 사용한다
인터페이스는 다중 구현이 가능하다
public interface Hyodoable{
void hyodo();
}
public class Musician extends Person implements Hyodoable {
@Override
public void hyodo() {
System.out.println("부모님 컴퓨터 관리해드리기);
}
};
public abstract
를 안붙여도 메서드로 인식된다 Person person = new Programmer ("허크", true);
Hyodoable person1 = new Programmer ("허크", true);
Hyodoable person2 = new PersonalTrainer ("김계란", 10);
Hyodoable person3 = new Musician ("아이유", false);
person1.hyodo();
person2.hyodo();
person3.hyodo();