package day08.protec.pac1;
public class A {
protected int f1;
int f2; // default (package-private, package-friendly)
protected void m1() {}
void m2() {}
public A() {}
protected A(int a) {}
A(double b) {}
void test() {
f1 = 1; f2 = 2;
m1(); m2();
new A();
new A(1);
new A(3.4);
}
}
package day08.protec.pac1;
public class B {
void test() {
A a = new A(); // public 생성자
new A(10); // protected 생성자
new A(3.3); // default 생성자
a.f1 = 10; a.f2 = 30;
a.m1(); a.m2();
}
}
package day08.protec.pac2;
import day08.protec.pac1.A;
public class C {
void test() {
A a = new A();
// 다른 패키지 불가능
// new A(10); // protected
// new A(5.5); // default
// a.f1 = 10; a.f2 = 30;
// a.m1(); a.m2();
}
}
package day08.protec.pac2;
import day08.protec.pac1.A;
public class D extends A {
D() {
// 다른패키지에서 상속받는 자식은 접근가능 (protected)
super(5);
f1 = 100; // protected
// f2 = 200; // default
m1();
// m2();
}
void test() {
A a = new A();
// f1 = 10; f2 = 30;
// m1(); m2();
}
}
final을 해석하면 ‘마지막’ 이라는 뜻이다. 즉, final 키워드가 붙으면 수정이 불가능한 것을 의미
필드, 메서드, 클래스, 지역변수에 선언이 가능!!!
public class Person {
final String nation; // 에러
String name;
int age;
}
public class Person {
final String nation = "대한민국"; // O
String name;
int age;
}
생성자를 이용해서 초기화
도 가능public class Person {
final String nation = "대한민국";
final String name;
int age;
//생성자를 이용해서 초기화.
public Person(final String name) {
// name = "김요한"; // 이럴 수도 있기 때문에 지역변수에 final
this.name = name;
}
}
public class Main {
Person p = new Person("김철수");
p.nation = "미국"; //에러
p.name = "김마이클"; //에러
}
public class Parent {
void method1() {}
void method2() {}
final void method3() {}
}
public class Child extends Parent {
@Override
void method1() {
// TODO Auto-generated method stub
super.method1();
}
@Override
void method2() {
// TODO Auto-generated method stub
super.method2();
}
// void method3() {
// System.out.println("오버라이딩 해야지~");
// } (x) final 메서드는 오버라이딩을 막습니다. (주는 대로 써라~)
}
public class Earth {
static final double RADIUS = 6400;
static final double SURFACE_AREA;
static {
SURFACE_AREA = RADIUS * RADIUS * Math.PI * 4;
}
}
고정된 상수들을 모아 관리할 수 있게하는 자료형
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
package day08.enum_;
public enum PizzaStatus {
ORDERED("주문 완료", 5),
READY("주문 완료", 20),
DELIVERED("배달 완료", 30);
private String description; // 설명
private int timeToSetup; // 소요 시간
PizzaStatus(String description, int timeToSetup) {
this.description = description;
this.timeToSetup = timeToSetup;
}
public String getDescription() {
return description;
}
public int getTimeToSetup() {
return timeToSetup;
}
}
package day08.enum_;
public class Pizza {
private String pizzaName; // 피자 이름
private PizzaStatus status; // 주문완료, 요리완료, 배달완료
// 피자 주문 기능
public void orderPizza() {
this.status = PizzaStatus.ORDERED;
System.out.println("피자 주문이 들어왔습니다.");
}
// 피자 준비 완료 기능
public void readyPizza() {
if (this.status == PizzaStatus.ORDERED) {
this.status = PizzaStatus.READY;
System.out.println("피자가 준비되었습니다.");
} else {
System.out.println("피자 주문이 없습니다.");
}
}
// 피자 배달 기능
public void deliverPizza() {
if (this.status == PizzaStatus.READY) {
this.status = PizzaStatus.DELIVERED;
System.out.println("피자가 배달되었습니다.");
} else {
System.out.println("피자가 아직 요리중입니다.");
}
}
public PizzaStatus getStatus() {
return status;
}
}
package day08.enum_;
public class Main {
public static void main(String[] args) {
Pizza pizza = new Pizza();
pizza.orderPizza();
// pizza.readyPizza();
// pizza.deliverPizza();
// 설명
System.out.println("pizza.getStatus() = " + pizza.getStatus().getDescription());
// 소요 시간
System.out.println("소요 시간: " + pizza.getStatus().getTimeToSetup());
}
}