상속은 유전과 같습니다. 부모의 클래스의 요소들을 자식 클래스가 가지는 것을 상속이라고 합니다. 이번 강의는 상속과 관련된 가장 첫 번째 강의입니다.
ㅤ
자식 클래스가 부모 클래스가 가지고 있는 요소들에 접근 할 수 있도록 하고 요소들을 가질 수 있도록 하는 것을 상속이라고 합니다.
ㅤ
상속을 하는 방법은 extends
키워드를 이용합니다.
public class ParentDog {
}
public class ChildDog extends ParentDog {
}
extends
키워드를 이용한 상속은 다중 상속이 불가능하며 자식 클래스는 하나의 부모 클래스에서만 상속 받을 수 있습니다.
또한 조부모 클래스, 부모 클래스, 자식 클래스로 구성할 수도 있습니다.
public class GrandParentDog {
}
public class ParentDog extends GrandParentDog {
}
public class ChildDog extends ParentDog {
}
ㅤ
부모 클래스로 부터 상속을 받을 수 있는 요소는 변수와 메서드입니다.
public class ParentDog {
protected String color = "black";
static protected int age = 10;
protected void bark() {
System.out.println("왈왈!");
}
}
public class ChildDog extends ParentDog {
// color, age 변수와
// bark(); 메서드의 요소를 상속 받는다
}
public class Main {
public static void main(String[] args) {
// ChildDog 클래스에 변수나 메서드를 선언하지 않아도 접근할 수 있습니다.
ChildDog childDog = new ChildDog();
System.out.println(childDog.color);
childDog.bark();
}
}
ParentDog 상속받은 요소를 ChildDog에서 사용할 수 있습니다,
ㅤ
접근 제어 지시자 protected
를 선언할 경우 같은 패키지뿐만 아니라 다른 패키지에서도 접근 가능하며, 상속도 같은 패키지, 다른 패키지 둘 다 접근이 가능합니다. 이 같은 특징은 public
지시자와 과 유사한 면이 있으며, public
지시자 다음으로 가장 열려있는 지시자입니다.
package com.codelatte.inheritance.dog;
public class GrandParentDog {
String leg = "long";
void bite() {
System.out.println("으르릉! 깨물다");
}
}
package com.codelatte.inheritance.dog;
public class ParentDog extends GrandParentDog {
protected String color = "black";
protected void bark() {
System.out.println("왈왈!");
}
}
package com.codelatte.inheritance.outdog;
import com.codelatte.inheritance.dog.ParentDog;
public class ChildDog extends ParentDog {
public void info() {
System.out.println(leg); // 접근 불가능
System.out.println(color);
}
public void howling() {
bite(); // 호출 불가능
bark();
System.out.println("아오오오~~");
}
}
ㅤ
접근 지시자 | 설명 | 사용할 수 있는 곳 |
---|---|---|
public | 모든 곳에서 접근 가능하다. inner 클래스에서도 접근 가능 | 클래스, 생성자, 변수, 메서드 |
protected | 같은 패키지 뿐만 아니라 다른 패키지에서도 접근 가능하며 상속도 같은 패키지, 다른 패키지 둘다 접근 가능하다. 다만 클래스 내부가 아닌 클래스 외부에서 메서드나 변수에 직접 접근할 수 없다. | 생성자, 변수, 메서드 |
default | 같은 패키지내에서만 접근 가능하며 상속도 같은 패키지 내에서만 접근 가능하다 | 클래스, 생성자, 변수, 메서드 |
private | 클래스 내부에서만 접근 가능하다. | inner 클래스, 생성자, 변수, 메서드 |
protected 예제 설명하는 부분 코드에 GrandParent 클래스, Parent 클래스, Child 클래스 모두 같은 패키지에 있으므로 leg변수와 bite메소드를 Child 클래스에서 사용할 수 있는거 아닌가요?
안녕하세요^^ 영상에서 나온 예제를 보고 말씀하신 것 같습니다.^^ 일단 leg 변수와 관련하여 ChildDog 클래스는 com.rclass.interitance.outdog 패키지에 있고, leg 변수를 가지고 있는 GrandParentDog은 com.rclass.interitance.dog 패키지에 있으므로 엄연하게 다른 패키지라 leg 변수를 사용할 수 없습니다. 그리고 bite() 메서드와 관련하여 ChildDog 클래스도 com.rclass.interitance.outdog 패키지에 있고, bite() 메서드를 가지고 있는 GrandParentDog은 com.rclass.interitance.dog 패키지에 있으므로 이 또한 다른 패키지라 해당 메서드를 사용할 수 없습니다. 폴더 구조로 봤을 때 com.rclass.interitance가 동일한 패키지라고 보일 수 있으나 뒤에 dog과 outdog이 다르므로 다른 패키지 입니다. 감사합니다^^
package와 extends 키워드와 protected 지시자를 유심히 살펴보세요.
상속은 유전과 같습니다. 부모의 클래스의 요소들을 자식 클래스가 가지는 것을 상속이라고 합니다. 이번 강의는 상속과 관련된 가장 첫 번째 강의입니다.
ㅤ
자식 클래스가 부모 클래스가 가지고 있는 요소들에 접근 할 수 있도록 하고 요소들을 가질 수 있도록 하는 것을 상속이라고 합니다.
ㅤ
상속을 하는 방법은 extends
키워드를 이용합니다.
public class ParentDog {
}
public class ChildDog extends ParentDog {
}
extends
키워드를 이용한 상속은 다중 상속이 불가능하며 자식 클래스는 하나의 부모 클래스에서만 상속 받을 수 있습니다.
또한 조부모 클래스, 부모 클래스, 자식 클래스로 구성할 수도 있습니다.
public class GrandParentDog {
}
public class ParentDog extends GrandParentDog {
}
public class ChildDog extends ParentDog {
}
ㅤ
부모 클래스로 부터 상속을 받을 수 있는 요소는 변수와 메서드입니다.
public class ParentDog {
protected String color = "black";
static protected int age = 10;
protected void bark() {
System.out.println("왈왈!");
}
}
public class ChildDog extends ParentDog {
// color, age 변수와
// bark(); 메서드의 요소를 상속 받는다
}
public class Main {
public static void main(String[] args) {
// ChildDog 클래스에 변수나 메서드를 선언하지 않아도 접근할 수 있습니다.
ChildDog childDog = new ChildDog();
System.out.println(childDog.color);
childDog.bark();
}
}
ParentDog 상속받은 요소를 ChildDog에서 사용할 수 있습니다,
ㅤ
접근 제어 지시자 protected
를 선언할 경우 같은 패키지뿐만 아니라 다른 패키지에서도 접근 가능하며, 상속도 같은 패키지, 다른 패키지 둘 다 접근이 가능합니다. 이 같은 특징은 public
지시자와 과 유사한 면이 있으며, public
지시자 다음으로 가장 열려있는 지시자입니다.
package com.codelatte.inheritance.dog;
public class GrandParentDog {
String leg = "long";
void bite() {
System.out.println("으르릉! 깨물다");
}
}
package com.codelatte.inheritance.dog;
public class ParentDog extends GrandParentDog {
protected String color = "black";
protected void bark() {
System.out.println("왈왈!");
}
}
package com.codelatte.inheritance.outdog;
import com.codelatte.inheritance.dog.ParentDog;
public class ChildDog extends ParentDog {
public void info() {
System.out.println(leg); // 접근 불가능
System.out.println(color);
}
public void howling() {
bite(); // 호출 불가능
bark();
System.out.println("아오오오~~");
}
}
ㅤ
접근 지시자 | 설명 | 사용할 수 있는 곳 |
---|---|---|
public | 모든 곳에서 접근 가능하다. inner 클래스에서도 접근 가능 | 클래스, 생성자, 변수, 메서드 |
protected | 같은 패키지 뿐만 아니라 다른 패키지에서도 접근 가능하며 상속도 같은 패키지, 다른 패키지 둘다 접근 가능하다. 다만 클래스 내부가 아닌 클래스 외부에서 메서드나 변수에 직접 접근할 수 없다. | 생성자, 변수, 메서드 |
default | 같은 패키지내에서만 접근 가능하며 상속도 같은 패키지 내에서만 접근 가능하다 | 클래스, 생성자, 변수, 메서드 |
private | 클래스 내부에서만 접근 가능하다. | inner 클래스, 생성자, 변수, 메서드 |
protected 예제 설명하는 부분 코드에 GrandParent 클래스, Parent 클래스, Child 클래스 모두 같은 패키지에 있으므로 leg변수와 bite메소드를 Child 클래스에서 사용할 수 있는거 아닌가요?
안녕하세요^^ 영상에서 나온 예제를 보고 말씀하신 것 같습니다.^^ 일단 leg 변수와 관련하여 ChildDog 클래스는 com.rclass.interitance.outdog 패키지에 있고, leg 변수를 가지고 있는 GrandParentDog은 com.rclass.interitance.dog 패키지에 있으므로 엄연하게 다른 패키지라 leg 변수를 사용할 수 없습니다. 그리고 bite() 메서드와 관련하여 ChildDog 클래스도 com.rclass.interitance.outdog 패키지에 있고, bite() 메서드를 가지고 있는 GrandParentDog은 com.rclass.interitance.dog 패키지에 있으므로 이 또한 다른 패키지라 해당 메서드를 사용할 수 없습니다. 폴더 구조로 봤을 때 com.rclass.interitance가 동일한 패키지라고 보일 수 있으나 뒤에 dog과 outdog이 다르므로 다른 패키지 입니다. 감사합니다^^
package와 extends 키워드와 protected 지시자를 유심히 살펴보세요.