- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
class Point { int x; int y; String getLocation() { return "x : " + x + " , y : " + y; } }
class Point3D extends Point { int z; // 조상의 getLocation()을 오버라이딩 String getLocation() { return "x :" + x + " , y :" + y + ", z :" + z; } }
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
(반환타입, 메서드이름, 매개변수 목록)class Point { int x; int y; String getLocation() { // 선언부 return "x : " + x + " , y : " + y; } }
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩(overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding) - 상속받은 메서드의 내용을 변경하는 것(change, modify)
- 객체 자신을 가리키는 참조변수.
인스턴스 메서드(생성자)내에만 존재 (static메서드내에 사용불가능)- 조상의 멤버를 자신의 멤버와 구별할 때 사용
- 조상의 생성자를 호출할때 사용
- 조상의 멤버는 조상의 생성자를 호출해서 초기화
class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } }
class Point3D extends Point { int z; Point3D(int x, int y, intz) { super(x,y); // 조상클래스의 생성자(Point(int x, int y)를 호출 this.z = z; // 자신의 멤버를 초기화 } }
- 추가조건 - 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.
그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입
- 클래스와 클래스의 (멤버 변수, 메서드)에 부가적인 의미 부여(형용사 역할)
👉 접근 제어자 : public, protected, (default)(아무것도 x), private
👉 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp- 하나의 대상에 여러 제어자를 같이 사용가능(접근 제어자는 하나만)
🌹 static - 클래스의, 공통적인
👉멤버변수
-> 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
-> 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
-> 클래스가 메모리에 로드될 때 생성
👉메서드
-> 인스턴스를 생성하지 않고도 호출이 가능 static 메서드가 된다.
-> static메서드 내에서는 인스턴스멤버들을 직접 사용 X.
🌹 final - 마지막의, 변경될 수 없는
👉 클래스
-> 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.
-> final로 지정된 클래스는 다른 클래스의 조상이 될 수 X.
👉 메서드
-> 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 X.
👉 멤버변수, 지역변수
-> 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 된다.
🌹 abstract - 추상의, 미완성의
👉 클래스
-> 클래스 내에 추상 메서드가 선언되어 있음을 의미
👉 메서드
-> 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.abstract class AbstractTest { // 추상 클래스(미완성 클래스)(추상메서드를 포함한 클래스) abstract void move(); // 추상메서드(미완성 메서드)(구현부가 없는 메서드- { } 이 없음) } AbstractTest a = new AbstractTest(); // 에러. 추상 클래스의 인스턴스 생성불가(미완성 설계도로 제품생성불가)
💋접근 제어자 (access modifier)
private < (default) < protected < public 순으로 접근허용이 넓어짐
private : 동일 클래스내에서 접근가능(접근자 의미없음)
접근자생략(default) : 상속 상관없이 동일한 패키지내에서만 접근 가능
protected(상속) :
동일 패키지는 상속 상관없이 접근 가능
다른 패키지의 자손클래스에서 접근 가능
public : 모든것 상관없이 접근 가능
- 접근 제어자를 사용하는 이유?
-> 외부로부터 데이터를 보호하기 위해서
-> 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
💎 출처
책: 자바의 정석