. Error class is extendable
- Error 클래스는 확장 가능
- 하지만, Error를 상속받아 새 클래스를 만드는 것은 일반적으로 잘못된 설계로 간주
Error 확장의 비추천 이유
- Error는 주로 JVM에서 발생하며, 개발자가 처리할 필요가 없음
- 이를 확장하여 사용자 정의 클래스를 만들면 혼란을 초래할 가능성 발
Error is a Throwable.
- 설명:
- Error는 Throwable의 서브클래스
- Throwable은 예외와 오류를 모두 나타내는 최상위 클래스
for (int e : data) {
if (e != key) {
continue;
count++; // 이 위치는 절대 실행되지 않습니다.
}
}
continue가 count++보다 먼저 실행되어 절대 count++에 도달할 수 없음
LocalDateTime dt = LocalDateTime.of(2014, 7, 31, 1, 1);
System.out.println(dt.format(DateTimeFormatter.ISO_DATE));
LocalDateTime dt = LocalDateTime.of(2014, 7, 31, 1, 1);
System.out.println(dt.format(DateTimeFormatter.ISO_DATE_TIME));
1. 2014-07-31
2. 2014-07-31T01:01
. static 메서드와 매개변수의 관계
- static 메서드는 매개변수를 자유롭게 사용할 수 있음
- 매개변수는 메서드 호출 시 전달되는 값이며, 해당 값은 메서드 실행 시 스택 메모리에 로드
- 매개변수는 static 또는 인스턴스와 관계가 없다...
Interface Exportable
- void export(); 메서드가 선언됨.
- public 접근 제어자가 암묵적으로 포함됨.
인터페이스에서는 public이 암묵적 선언임을 기억
class Parent {
public void show() {
System.out.println("Parent's show method");
}
}
class Child extends Parent {
public void show() {
System.out.println("Child's show method");
}
}
public class Test {
public static void main(String[] args) {
Parent p = new Parent(); // 부모 객체 생성
Child c = (Child) p; // 다운캐스팅 시도 (실패)
c.show(); // 런타임 예외 발생
}
}
애초에 자식 객체라서 같은 참조변수로는 다운캐스팅이 가능하지만
애초에 부모타입의 객체 였다면 자식 타입으로 다운캐스팅 실패
>Exception in thread "main" java.lang.ClassCastException: Parent cannot be cast to Child
import static clothing.Shirt.getColor;
public void matchShirt() {
String color = getColor();
if (color.equals("Green")) {
System.out.print("Fit");
}
}
- Line n1에 import static clothing.Shirt.getColor;를 추가
이는 getColor() 메서드를 정적으로 가져와 클래스 이름 없이 사용할 수 있도록 함 - Line n2에 String color = getColor();를 추가
for (String s : days) {
switch (s) {
case "sat":
wd -= 1;
break; // switch 문만 종료
case "sun":
wd -= 1;
break;
}
if (wd < -1) { // 조건에 따라 for 루프 종료
break; // for 루프 전체 종료
}
}
switch 문 안에서의 break는 단순히 switch문 만을 break
만약 for문 자체를 종료학 싶다면 그 밖에서 break 걸어야함
인터페이스 구현과 추상 클래스
- 인터페이스를 구현하는 클래스는 인터페이스의 모든 메서드를 반드시 구현해야 함
- 만약 일부 메서드를 구현하지 않았다면, 해당 클래스는 추상 클래스로 선언해야 함
- 추상 메서드가 없어도, 구현되지 않은 인터페이스 메서드가 남아 있는 경우 추상 클래스로 선언해야 함
추상 클래스가 되는 조건 요약
- 추상 메서드가 있을 경우: 자동으로 추상 클래스
- 인터페이스를 구현했으나 일부 메서드를 구현하지 않았을 경우: 추상 클래스여야 함
// 인터페이스 정의
interface Downloadable {
// 인터페이스 메서드는 기본적으로 public abstract
void download();
}
interface Readable extends Downloadable { // Readable은 Downloadable을 확장
void readBook();
}
// 추상 클래스 Book
abstract class Book implements Readable {
// Readable 인터페이스의 readBook 메서드를 구현
public void readBook() {
System.out.println("Read Book");
}
// Downloadable 인터페이스의 download 메서드는 구현하지 않음 -> 추상 클래스여야 함
}
// 일반 클래스 EBook
class EBook extends Book {
// Book 클래스의 readBook 메서드를 오버라이딩
public void readBook() {
System.out.println("Read E-Book");
}
// Downloadable 인터페이스의 download 메서드를 구현하지 않음 -> 여전히 상위 클래스의 추상 상태 유지
}
// 테스트 코드
public class Test {
public static void main(String[] args) {
Book book1 = new EBook(); // EBook은 Book을 상속받았으므로 업캐스팅 가능
book1.readBook(); // EBook 클래스에서 오버라이딩된 readBook 호출
}
}
마지막 EBook클래스에서 downloadable 메서드를 구현하지 않았기 때문에 Compilation fails
abstract class Toy {
int price; // 기본 필드 정의
// line n1
}
Line n1에 들어갈 수 있는 코드들
1.public static void insertToy() {
// 정적 메서드는 추상 클래스에서도 허용
// 클래스 단위로 객체가 올라가기 때문
}
2.final Toy getToy() {
return new Toy(); // 오류 발생: 추상 클래스는 객체생성 불가
}
3.public int calculatePrice() {
return price; // 구현된 일반메서드
}
4.public void printToy(); // 오류 발생: 구현이 없는 메서드는 abstract여야 함.
'Certification > OCAJP' 카테고리의 다른 글
OCAJP 복습(6) (0) | 2024.12.12 |
---|---|
OCAJP 복습(5) (1) | 2024.12.11 |
OCAJP 복습(3) (0) | 2024.12.09 |
OCAJP 복습(2) (0) | 2024.12.08 |
OCAJP 복습(1) (1) | 2024.12.05 |