상속받은 메서드를 자식클래스에서 고쳐 기입하는 것. 같은 사양(prototype)
override : ~위에 덮어쓰다(overwrite)
자식클래스에서 오버라이딩하는 메서드는 부모클래스의 메서드와
- 이름이 같아야 한다
- 매개변수가 같아야 한다
- 반환타입이 같아야 한다
예시
class Point {
int x;
int y;
String getLocation() {
return "x : " + x + ", y :" + y; // -> x,y를 문자열로 반환
}
}
class Point3D extends Point {
int z;
String getLocation() { // 자신에 맞게 고쳐 반환하도록 오버라이딩
return "x : " + x + ", y :" + y + ", z : " + z;
}
}
예시
class Parent {
void parentMethod() {}
}
class Child {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {}
void childMethod(int i) {} // 오버로딩
}
자기자신. 멤버변수와 지역변수의 이름이 같을 때 사용
생성자 간에서 서로 호출 가능
: 생성자. 같은 클래스의 다른 생성자를 호출
this의 조건
예시
public class Mainclass {
public static void main(String[] args) {
MyClass clsOne = new MyClass();
System.out.println(clsOne); // heap영역의 주소
System.out.println(clsOne.getThis());
clsOne.method();
}
}
class MyClass {
String name;
public MyClass() {
this("jhon");
System.out.println("MyClass MyClass()");
}
public MyClass(String name) {
this.name = name;
System.out.println("MyClass MyClass(String name) name = " + name);
}
MyClass getThis() { // 0번째 매개변수로 모든 메서드에 추가되어 있다
return this;
}
void method() {
System.out.println(this);
this.name = "일지매";
this.getThis();
}
void setName(String name) {
// 멤버변수 매개변수
this.name = name;
}
void setNameMethod() {
String name = "홍길동"; // 지역변수
this.name = name;
}
}
// console
/*
MyClass MyClass(String name) name = jhon
MyClass MyClass()
MyClass@8efb846
MyClass@8efb846
MyClass@8efb846
*/
자식클래스에서 부모클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수
상속받은 멤버와 자신의 멤버와 이름이 같을 때 사용
super대신 this사용 가능
부모클래스의 멤버와 자식클래스의 멤버가 중복 정의되어 서로 구별되어야하는 경우에 super사용
: 생성자. 부모클래스의 생성자를 호출하는데 사용
: 부모클래스 멤버의 초기화 작업이 수행되어야 하기 때문에 자식클래스의 생성자에서 호출됨
: 상속관계를 거슬러 올라가며 계속 반복. 'Object()' 에서 끝 -> 최상위 부모 클래스
예시
public class Mainclass {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void method() {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
// console
/*
x = 20
this.x = 20
super.x = 10
*/