21.01.04-29일차

되자개발자·2021년 2월 24일
0

기록하기

목록 보기
29/46
post-thumbnail

💍 오버라이딩 (overriding)

  • 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
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;
        }
}
  • 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  • 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

💎 오버로딩 vs 오버라이딩

오버로딩(overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding) - 상속받은 메서드의 내용을 변경하는 것(change, modify)

💍 참조변수 super

  • 객체 자신을 가리키는 참조변수.
    인스턴스 메서드(생성자)내에만 존재 (static메서드내에 사용불가능)
  • 조상의 멤버를 자신의 멤버와 구별할 때 사용

💍 super() - 조상의 생성자

  • 조상의 생성자를 호출할때 사용
  • 조상의 멤버는 조상의 생성자를 호출해서 초기화
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();를 삽입

💍 제어자 (modifier)

  • 클래스와 클래스의 (멤버 변수, 메서드)에 부가적인 의미 부여(형용사 역할)
    👉 접근 제어자 : 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 : 모든것 상관없이 접근 가능

💍 접근 제어자를 이용한 캡슐화

  • 접근 제어자를 사용하는 이유?
    -> 외부로부터 데이터를 보호하기 위해서
    -> 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

💎 출처

책: 자바의 정석

profile
열심히가 되는 길♨_♨

0개의 댓글