π Today I Learned - μ€λ λ΄κ° 곡λΆν κ²μ μ 리ν©λλ€.
private: λͺ¨λ μΈλΆ νΈμΆμ λ§λλ€default(package-private): κ°μ ν¨ν€μ§μμμ νΈμΆμ νμ©protected: κ°μ ν¨ν€μ§ μμμ νΈμΆμ νμ©. ν¨ν€μ§κ° λ¬λΌλ μμ κ΄κ³μ νΈμΆμ νμ©public: λͺ¨λ μΈλΆ νΈμΆ νμ©Parent
package extends1.access.parent;
public class Parent {
public int publicValue;
protected int protectedValue;
int defaultValue;
private int privateValue;
public void publicMethod() {
System.out.println("Parent.publicMethod");
}
protected void protectedMethod() {
System.out.println("Parent.protectedMethod");
}
void defaultMethod() {
System.out.println("Parent.defaultMethod");
}
private void privateMethod() {
System.out.println("Parent.privateMethod");
}
public void printParent() {
System.out.println("==Parent λ©μλ μ==");
System.out.println("publicValue = " + publicValue);
System.out.println("protectedValue = " + protectedValue);
System.out.println("defaultValue = " + defaultValue); // λΆλͺ¨ λ©μλ μμμ μ κ·Ό κ°λ₯
System.out.println("privateValue = " + privateValue); // λΆλͺ¨ λ©μλ μμμ μ κ·Ό κ°λ₯
// λΆλͺ¨ λ©μλ μμμ λͺ¨λ μ κ·Ό κ°λ₯
defaultMethod();
privateMethod();
}
}
Child
package extends1.access.child;
import extends1.access.parent.Parent;
public class Child extends Parent {
public void call() {
publicValue = 1;
protectedValue = 1; // μμ κ΄κ³ or κ°μ ν¨ν€μ§
// defaultValue = 1; // λ€λ₯Έ ν¨ν€μ§ μ κ·Ό λΆκ°, μ»΄νμΌ μ€λ₯
// privateValue = 1; // μ κ·Ό λΆκ°, μ»΄νμΌ μ€λ₯
publicMethod();
protectedMethod(); // μμ κ΄κ³ or κ°μ ν¨ν€μ§
// defaultMethod(); // λ€λ₯Έ ν¨ν€μ§ μ κ·Ό λΆκ°, μ»΄νμΌ μ€λ₯
// privateMethod(); // μ κ·Ό λΆκ°, μ»΄νμΌ μ€λ₯
printParent();
}
}
μ κ·Ό μ μ΄μ λ©λͺ¨λ¦¬ ꡬ쑰

λΆλͺ¨μ μμμ νλλͺ
μ΄ κ°κ±°λ λ©μλκ° μ€λ²λΌμ΄λ© λμ΄ μμΌλ©΄, μμμμ λΆλͺ¨μ νλλ λ©μλλ₯Ό νΈμΆν μ μλ€.
μ΄λ super ν€μλλ₯Ό μ¬μ©νλ©΄ λΆλͺ¨λ₯Ό μ°Έμ‘°ν μ μλ€.
Parent
package extends1.super1;
public class Parent {
public String value = "parent";
public void hello() {
System.out.println("Parent.hello");
}
}
Child
package extends1.super1;
public class Child extends Parent {
public String value = "child";
@Override
public void hello() {
System.out.println("Child.hello");
}
public void call() {
System.out.println("this.value = " + this.value); // this μλ΅ κ°λ₯
System.out.println("super.value = " + super.value);
this.hello(); // this μλ΅ κ°λ₯
super.hello();
}
}
SuperMain
package extends1.super1;
public class Super1Main {
public static void main(String[] args) {
Child child = new Child();
child.call();
}
}

this: μκΈ° μμ μ μ°Έμ‘°, thisλ μλ΅ κ°λ₯super: λΆλͺ¨ ν΄λμ€μ λν μ°Έμ‘°

μμμ λ°μΌλ©΄ μμ±μμ 첫μ€μ super(...)λ₯Ό μ¬μ©ν΄μ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν΄μΌ νλ€.
λΆλͺ¨ ν΄λμ€μ μμ±μκ° κΈ°λ³Έ μμ±μμΈ κ²½μ°μλ super()λ₯Ό μλ΅ν μ μλ€.
π μ€λμ νν°λκ» κ·Έλμ κΆκΈνλ κ²λ€μ μ§λ¬Ένλ λΌμ΄λΈ Q&A μκ°μ κ°μ‘λ€. νμ¬ μν©μ λν λλ €μκ³Ό κ±±μ μ΄ λ§μλλ° κ²°λ‘ μ μ²μ κ²°μ¬νλ λ§μκ°μ§ κ·Έλλ‘ μ κ°λ κ²μ΄λ€. μ·¨μ , κ°λ° 무μμ΄λ κΎΈμ€ν μ΄μ¬ν νμ.