용어들에 너무 익숙하지 않았다.
이전에 정리한 것 처럼,
새로 알게된 것이나 익숙해지고자 하는 것 위주로 정리해 보고자 한다.
매개변수 즉, 입력하는 값이 다르지만 같은 기능을 수행하는 경우가 많을 때 사용성 및 효율을 높이기 위해 오버로딩을 사용합니다.
class Overloading8_1 {
int add(int a, int b) {
System.out.println("int add(int a, int b)");
return a + b;
}
// void add(int a, int b) { // 반환 타입이 다르다고 오버로딩이 성립되지는 않음
// System.out.println("void add(int a, int b)");
// System.out.println("a + b = " + a + b);
// }
long add(long a, long b) {
System.out.println("long add(long a, long b)");
return a + b;
}
long add(long a, int b) {
System.out.println("long add(long a, int b)");
return a + b;
}
long add(int a, long b) {
System.out.println("long add(int a, long b)");
return a + b;
}
}
상속
기존의 클래스로 새로운 클래스를 작성하는 것입니다.
두 클래스를 부모와 자식으로 관계를 맺어주는 것입니다.
extends 키워드를 사용하여 관계를 맺어줍니다.class Parent {} class Child extends Parent{}
포함
클래스의 멤버로 참조변수를 선언하는 것입니다.
작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만듭니다.class Engine {} class Door {} class Car { Engine engine = new Engine(); Door[] doors = new Door[4]; // 자동차 문 4개, Door 클래스 하나로 문 4개 생성 }
상속관계 : ~은 ~이다. (is - a)
포함관계 : ~은 ~을 가지고 있다. (has - a)
절대적이진 않지만 많이 도움이 될 것 같아 넣어보았다.
상속받은 조상의 메서드를 자신에게 맞게 변경하는 것.
class Point {
int x,y;
String getLocation() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
@Override
String getLocation() {
return "x: " + x + ", y: " + y + ", z: " + z;
}
}
오버로딩 vs 오버라이딩
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것.
오버라이딩 : 상속받은 메서드의 내용을 변경하는 것.
super는 진짜 안익숙하다. 적응하자
class Child extends Parent {
int x = 30;
Child() {
// super() 를 통해서 부모 클래스의 멤버변수를 초기화합니다.
super(10, 20, 30);
}
void childMethod() {
System.out.println("Child 의 x = " + x);
System.out.println("현재 객체 자신의 x = " + this.x);
System.out.println("Parent 의 x 의 " + super.x);
// 만약 Child 에 변수 x 가 없다고 한다면
// 위 int x = 30; 을 주석하시면 this.x 는 부모클래스의 x를 가리킵니다.
// Child 의 x = 10 이 됩니다.
}
}
클래스와 클래스의 멤버(변수, 메서드) 에 부가적인 의미를 부여합니다.
접근 제어자 : public, protected, (default), private
그 외 : static, final, abstract ...하나의 대상에 여러 제어자를 같이 사용 가능합니다.(접근 제어자는 하나만)
순서는 상관없지만 주로 접근 제어자를 제일 왼쪽에 선언합니다.
public static void main(String[] args) {}
접근 제어자
private : 같은 클래스 내에서만 접근이 가능합니다.
(default) : 같은 패키지 내에서만 접근이 가능합니다. (생략가능)
protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능합니다.
public : 접근 제한이 전혀 없습니다.