
인스턴스 멤버/STATIC 멤버 오버라이딩
instance 필드 - 오버라이딩X
instance 메서드 - 오버라이딩O->메서드 오버라이딩
static 필드 - 오버라이딩X
static 메서드 - 오버라이딩X
인스턴스 필드와 정적 멤버의 중복
인스턴스 필드 - 메소드 밖에 있는 변수
인스턴스 필드는 오버라이딩이 되지 않음
static 메서드는 오버라이딩이 되지 않음
필드명 중복 또는 메서드 오버라이딩으로 가려진 부모의 필드/메서드를 호출하기 위해 주로 사용함.
super 키워드가 자주 사용되는 이유
코드가 간단해짐
생성자 내부에서만 사용 가능
모든 자바 클래스의 부모 클래스
Object oa = new A(); A aa = new A();
Object ob= new B(); B bb = new B();
A ab = new B();
객체의 정보 패키지.클래스명@해쉬코드
일반적으로 오버라이딩해서 사용
toString() - 숫자를 문자형으로 만들기
정수(Int) - Integer.toString
실수(Float) - Float.toString
실수(Double) - Double.toString
롱(Long) - Long.toString
문자를 숫자로 바꾸기
정수(Int) - Integer.parseInt
실수(Float) - Float.parseFloat
실수(Double) - Double.parseDouble
롱(Long) - Long.parseLong
문자열은 equals()로 비교한다.
객체의 stack 메모리에 만들어진 변수의 내용인 번지값 비교
비교연산자 ==와 동일한 결과
객체의 hashCode() 값 리턴. HashTable, HashMap 등의 동등비교에 사용
final 필드/지역변수는 값의 변경뿐만 아니라 추가적인 값의 대입 자체가 불가하다.
완성되지 않은 미완성 메서드
존재 목적: 부모 타입으로 cry() 호출을 위해 기능이 없으니 메서드의 이름만 정의.
Animal animal1 = new Cat()과 같이 다형적 표현을 사용했을 때도 animal1.cry()의 형태로 cry() 메서드를 호출하기 위해서임.
class Animal {
void cry() {
} // 메서드 자체는 아무런 기능을 수행하지 않음.
}
abstract void cry();
추상메서드를 하나도 포함하지 않아도 추상클래스로 정의는 가능하다
다만 추상메서드가 없는 경우 추상메서드로 정의할 이유가 없다.
추상 클래스 - 서로 비슷한 기능을 하는 클래스들을 묶을 때 사용한다.
서로 다른 기능을 하는 클래스들을 묶을 때 사용
모든 필드가 public static final로 정의
모든 메서드가 public abstract로 정의 (디폴트메서드 제외)
디폴트 메서드는 public으로 정의
자체적으로 객체 생성 불가함.
interface A {
public static final int a = 3;
public abstract void abc();
}
// static 객체 생성하지 않고도 쓸 수 있음.
부모클래스의 미완성메서드(추상메서드)를 자식클래스에서 재정의(완성)
메서드의 완성과 미완성의 구분 기준 -> 중괄호의 존재 여부
중괄호안에 아무런 코드가 없어도 완성된 메서드
-> 아무일도 하지 말라고 명확히 기능이 표현된 메서드
interface A {
public static final int a = 3;
public abstract void abc();
}
interface B {
int b = 3; // public static final 자동 추가
void bcd(); // public abstract 자동 추가
}
public static void main(String[] args) {
// 1. 필드의 static 특징 확인 (클래스/인터페이스 이름으로 바로 접근 가능)
System.out.println(A.a); // A
System.out.println(B.b);
// 2. 필드의 final 특징 확인(값 변경 불가)
A.a = 4; // 불가능
B.b = 4; // 불가능
}
상속시 implements 사용
다중상속 가능
클래스(일반클래스/추상클래스)는 다중상속 불가
다중상속
협업: 개념 공유
클래스 설계 표준화 유도
인터페이스 내부의 완성된 메서드
디폴트 메서드를 실행하기 위해서는 상속시켜야 한다.
interface 인터페이스명 {
public default 리턴 타입 메서드명 {
// 메서드 내용
}
}
메서드 앞에 default 키워드 추가: 접근지정자 default가 아님. 접근지정자는 자동으로 public 추가됨.
오버라이딩도 가능함.
부모인터페이스이름.super.디폴트메서드이름

인터페이스 내에 정적(static) 메서드
클래스 내부의 정적메서드와 사용방법 동일(객체 생성 없이 클래스 이름으로 바로 접근 가능)