[Java] superμ super()μ κ°λ
λͺ©μ°¨
1. superμ κ°λ
2. super()μ κ°λ - (μ‘°μ ν΄λμ€ μμ±μ)
1. superμ κ°λ
superλ μμ ν΄λμ€μμ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ₯Ό μ°Έμ‘°νλ λ° μ¬μ©λλ μ°Έμ‘° λ³μμ λλ€. λ©€λ² λ³μμ μ§μλ³μμ μ΄λ¦μ΄ κ°μ λ thisλ₯Ό λΆμ¬μ ꡬλ³νλ―μ΄ μμλ°μ λ©€λ²μ μμ μ λ©€λ²μ μ΄λ¦μ΄ κ°μ λλ superλ₯Ό λΆμ¬μ ꡬλ³ν μ μμ΅λλ€.
μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ μμ ν΄λμ€ μμ μ λ©€λ²μ΄λ―λ‘ superλμ thisλ₯Ό μ¬μ©ν μ μμ΅λλ€. (κ·Έλλ μ‘°μ ν΄λμ€μ λ©€λ²μ μμ ν΄λμ€μ λ©€λ²κ° μ€λ³΅ μ μλμ΄ μλ‘ κ΅¬λ³ν΄μΌ νλ κ²½μ°μλ§ superλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.)
μ‘°μμ λ©€λ²μ μμ μ λ©€λ²λ₯Ό ꡬλ³νλ λ° μ¬μ©λλ€λ μ μ μ μΈνκ³ λ superμ thisλ 근볡μ μΌλ‘ κ°μ΅λλ€. λͺ¨λ μΈμ€ν΄μ€ λ©μλμλ μμ μ΄ μν μΈμ€ν΄μ€μ μ£Όμκ° μ§μλ³μλ‘ μ μ₯λλλ°, μ΄κ²μ΄ μ°Έμ‘° λ³μμΈ thisμ superμ κ°μ΄ λ©λλ€.
staticλ©μλ(class λ©μλ)λ μΈμ€ν΄μ€μ μ ν κ΄λ ¨μ΄ μμ΅λλ€. κ·Έλμ thisμ λ§μ°¬κ°μ§λ‘ super μμ staticλ©μλμμλ μ¬μ©ν μ μκ³ μΈμ€ν΄μ€ λ©μλμμλ§ μ¬μ©ν μ μμ΅λλ€.μλ μμ μ½λλ₯Ό ν΅ν΄ νλ² λ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
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, this.x, super.x λͺ¨λ κ°μ λ³μλ₯Ό μλ―Ένκ³ μκΈ° λλ¬Έμ κ²°κ³Όμ μΌλ‘ λͺ¨λ κ°μ κ°μ΄ μΆλ ₯λμμ΅λλ€.
class SuperTest2 {
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);
}
}
μ΄λ² μ½λμμλ μ΄μ κ³Ό λ¬λ¦¬ κ°μ μ΄λ¦μ λ©€λ² λ³μκ° μ‘°μ ν΄λμ€μΈ Parentμλ μκ³ , μμ ν΄λμ€μΈ Childν΄λμ€μλ μμ΅λλ€. μ΄λ΄ λμλ super.xμ this.xλ μλ‘ λ€λ₯Έ κ°μ μ°Έμ‘°νκ² λ©λλ€. super.xλ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ² λ³μ xλ₯Ό λ»νλ©°, this.xλ μμ ν΄λμ€μ μ μΈλ λ©€λ² λ³μλ₯Ό λ»ν©λλ€.
μ΄μ²λΌ μ‘°μ ν΄λμ€μ μ μΈλ λ©€λ² λ³μμ κ°μ μ΄λ¦μ λ©€λ² λ³μλ₯Ό μμ ν΄λμ€μμ μ€λ³΅ν΄μ μ μνλ κ²μ΄ κ°λ₯νλ©° μ°Έμ‘° λ³μ superλ₯Ό μ΄μ©ν΄μ μλ‘ κ΅¬λ³ν μ μμ΅λλ€.
λ³μλ§μ΄ μλλΌ λ©μλ μμ superλ₯Ό μ¨μ νΈμΆν μ μμ΅λλ€. νΉν μ‘°μ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©ν κ²½μ°μ μλ μ½λμ²λΌ super.λ©μλ()λ₯Ό μ¬μ©νμ¬ νΈμΆμ΄ κ°λ₯ν©λλ€.
class Point {
int x;
int y;
String getLocation() {
return "x :" + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() { // μ€λ²λΌμ΄λ©
return super.getLocation() + ", z: " + z; //μ‘°μμ λ©μλ νΈμΆ
}
}
2. super()μ κ°λ - (μ‘°μ ν΄λμ€ μμ±μ)
this()μ λ§μ°¬κ°μ§λ‘ super() μμ μμ±μμ λλ€. this()λ κ°μ ν΄λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆνλ λ° μ¬μ©λμ§λ§, super()λ μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ λ° μ¬μ©λ©λλ€.
μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, μμμ λ©€λ²μ μ‘°μμ λ©€λ²κ° λͺ¨λ ν©μ³μ§ νλμ μΈμ€ν΄μ€κ° μμ±λ©λλ€. κ·Έλμ μμ ν΄λμ€μ μΈμ€ν΄μ€κ° μ‘°μ ν΄λμ€μ λ©€λ²λ€μ μ¬μ©ν μ μλ κ²μ λλ€. μ΄λ μ‘°μ ν΄λμ€ λ©€λ²μ μ΄κΈ°ν μμ μ΄ μνλμ΄μΌ νκΈ° λλ¬Έμ μμ ν΄λμ€μ μμ±μμμ μ‘°μ ν΄λμ€μ μμ±μκ° νΈμΆλμ΄μΌ ν©λλ€.
μμ±μμ 첫 μ€μμ μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν΄μΌ νλ μ΄μ λ μμ ν΄λμ€μ λ©€λ²κ° μ‘°μ ν΄λμ€μ λ©€λ²λ₯Ό μ¬μ©ν μλ μμΌλ―λ‘ μ‘°μμ λ©€λ²λ€μ΄ λ¨Όμ μ΄κΈ°νλμ΄ μμ΄μΌ νκΈ° λλ¬Έμ λλ€.
μ΄μ κ°μ μ‘°μ ν΄λμ€ μμ±μμ νΈμΆμ ν΄λμ€μ μμκ΄κ³λ₯Ό κ±°μ¬λ¬ μ¬λΌκ°λ©΄μ κ³μ λ°λ³΅λ©λλ€. λ§μ§λ§μΌλ‘ λͺ¨λ ν΄λμ€μ μ΅κ³ μ‘°μμΈ Objectν΄λμ€μ μμ±μμΈ Object()κΉμ§ κ°μμΌ λμ΄ λ©λλ€.
Objectν΄λμ€λ₯Ό μ μΈν λͺ¨λ ν΄λμ€μ μμ±μλ 첫 μ€μ λ°λμ μμ μ λ€λ₯Έ μμ±μ λλ μ‘°μμ μμ±μλ₯Ό νΈμΆν΄μΌ ν©λλ€.
λ§μ½ κ°λ°μκ° μ§μ μΆκ°νμ§ μλλ€λ©΄ μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±μμ 첫 μ€μ 'super();'λ₯Ό μΆκ°ν©λλ€.
import java.util.ArrayList;
class Test {
public static void main(String[] args) {
Point3D point3D = new Point3D(1, 2, 3);
System.out.println(point3D.toString());
}
}
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;
}
}
μ μ½λκ° μ λλ‘ μ»΄νμΌμ΄ μ§νλ κΉμ? κ²°λ‘ μ λ¨Όμ λ§μλ리μλ©΄ μ»΄νμΌ μλ¬κ° λ°μνκ² λ©λλ€. Point3D ν΄λμ€μ μμ±μμ 첫 μ€μ΄ μμ±μ(μ‘°μμ κ²μ΄λ μμ μ κ²μ΄λ )λ₯Ό νΈμΆνλ λ¬Έμ₯μ΄ μλκΈ° λλ¬Έμ μ»΄νμΌλ¬λ λ€μκ³Ό κ°μ΄ μ μ½λμ μ£Όμ λΆλΆμ μλμΌλ‘ super();λ₯Ό μΆκ°ν΄μ£Όκ² λ©λλ€.
Point3D(int x, int y, int z) {
super();
this.x = x;
this.y = y;
this.z = z;
}
κ·Έλμ Point3Dν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, μμ±μ Point3D(int x, int y, int z)κ° νΈμΆλλ©΄μ 첫 λ¬Έμ₯μΈ super();λ₯Ό μννκ² λ©λλ€. super()λ Point3Dν΄λμ€μ μ‘°μμΈ Pointν΄λμ€μ κΈ°λ³Έ μμ±μμΈ Point()μ κ°μ μλ―Έμ λλ€. νμ§λ§ Point() ν΄λμ€μ μμ±μ Point()κ° μ μλμ΄ μμ§ μκΈ° λλ¬Έμ μ»΄νμΌ μλ¬κ° λ°μνλ κ²μ λλ€. λ°λΌμ μλμ κ°μ΄ μμ±ν΄μΌ μ μμ μΌλ‘ μλνκ² λ©λλ€.
Point3D(int x, int y, int z) {
super(x, y);
this.x = x;
this.y = y;
this.z = z;
}
μ‘°μ ν΄λμ€μ λ©€λ² λ³μλ μ΄μ²λΌ μ‘°μμ μμ±μμ μν΄ μ΄κΈ°νλλλ‘ ν΄μΌ νλ κ²μ λλ€.