[TIL]JAVA-上書き(上書き)
💡Day 11オーバーライド
この文章は南宮星のjava定式3/eをもとに学習内容を整理した文章です.
クリーンアップソース:https://github.com/qudalsrnt3x/javaStandard
超光速とは?
サブクラスにのみスーパークラスメソッドの新しい内容を作成します.
上書き条件
ただし、アクセス制御者(accessmodifier)と例外(exception)は、限られた条件で異なる変更しかできません。
public, protected, (default), private
조상 클래스의 접근 제어자가 protected면
자손 클래스의 접근 제어자는 protected or public이어야 한다.
class Parent {
void parentMethod() exception IOException, SQLException {
...
}
}
class Child extends Parent {
@Overriding
void parentMethod() {
...
}
}
過負荷vs過負荷
過負荷の既存の新しいメソッドを定義する(new)
継承メソッドを上書きする内容の変更(change,modify)
class Parent {
void parentMethod(){}
}
class Child extends Parent {
void parentMethod(){} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
}
✏️super
子クラスで親から継承されたメンバーを参照する参照変数.
class SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
void method(){
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
実行結果x = 10
this.x = 10
super.x = 10
変数もメソッドもsuperを呼び出すことができます
class Point {
int x;
int y;
String getLocation(){
return "x : " + x + ", y : " + y;
}
}
class Point3D extends Point {
int z;
@Override
String getLocation(){
return super.getLocation() + ", z : " + z;
// 부모의 메소드 호출
}
}
*スタティックメソッド(クラスメソッド)は、インスタンスには関係ありません。したがって,これと同様にsuperも静的メソッドでは使用できず,インスタンスメソッドでのみ使用できる.
▼▼super()-先祖類の創建者
this()と同様にsuper()も構造関数です.
同じクラスの他のジェネレータを呼び出す
super()親クラスの作成者を呼び出す
public class PointTest {
public static void main(String[] args) {
Point3D p3 = new Point3D(1, 2, 3);
}
}
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
// 생성자 첫 줄에 다른 생성자를 호출하지 않기 때문에 컴파일러는
// super()를 삽입한다.
this.x = x;
this.y = y;
this.z = z;
}
String getLocation() {
return super.getLocation() + ", z :" + z;
}
}
実行結果PointTest.java:22: cannot resolve symbol
symbol : contructor Point()
location: class Point
Point3D(int x, int y, int z) {
^
1 error
コンストラクション関数がない場合、コンパイラは基本コンストラクション関数を指定します.Pointクラスでコンストラクション関数が指定されているため、基本コンストラクション関数はありません.Point 3 Dクラスの作成者に祖先クラスの作成者Point()が見つからない
Point3D(int x, int y, int z) {
super(x, y);
}
祖先クラスのジェネレータをsuper(x,y)で呼び出す.祖先クラスのメンバー変数は、祖先の作成者によって初期化されるべきです.
Reference
この問題について([TIL]JAVA-上書き(上書き)), 我々は、より多くの情報をここで見つけました https://velog.io/@qudalsrnt3x/TIL-JAVA-오버라이딩overridingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol