상속성(inheritance) :
: 부모 클래스로부터 속성 or 특성을 상속받는 것
: variable(변수), method(함수)를 물려받는 것
: 다중 상속은 불가능하다!
형식 :
class 부모클래스명{
부모변수
부모메소드
}
class 자식클래스 extends 부모클래스명{
(부모변수)
(부모메소드) -> 우리눈엔 보이지 않지만 내려와있는 것이다.
자식변수
자식메소드
}
간단한 예제로 사용 형식 보기
public class MainClass {
public static void main(String[] args) {
Child child = new Child();
child.number = 123;
child.name = "홍길동";
child.parent_method();
}
}
class Parent{
int number;
String name;
void parent_method(){
System.out.println("Parent parent_nethod()");
}
}
class Child extends Parent{
}
: child에 출력값이 없지만 Child 클래스에 extends로 Parent가 부모클래스로 지정되어있다.
: 그래서 child.parent_method()로 호출이 가능하다.("Parent parent_nethod()" 이게 출력 됨)
다중상속 불가능
class Parent{
int number;
String name;
void parent_method(){
System.out.println("Parent parent_nethod()");
}
}
class Human{
}
class Child extends Parent, Human{
}
: 이런식으로 extneds에 parent와 Human 함께 상속은 불가능하다.(자바에서)
: extends 를 사용하여 클래스 간 상속을 정의할 수 있다.
: 하지만 한 클래스에서 두 개 이상의 클래스를 동시에 상속받는 다중 상속은 지원하지 않는다.
상속성 활용한 예제
public class MianClass {
public static void main(String[] args) {
child Child = new child();
Child.method();
}
}
public class Parent {
public void method(){
System.out.println("Parent method()");
}
}
public class child extends Parent {
public void method(){
System.out.println("Child method()");
}
}
: 이렇게만 하면 child.method() 호출 시 "Child method()" 출력된다.
자식클래스에서 Super
public class child extends Parent {
public void method(){
super.method(); // 부모클래스(Parent) 메소드가 호출
System.out.println("Child method()");
}
}
: 자식클래스에서 super.method();를 넣으면 부모클래스의 method() 함수도 같이 호출된다.
: "Parent method()", "Child method()" 출력
자식클래스에 protected로 선언 시 main클래스에서 접근 불가능
public class MianClass {
public static void main(String[] args) {
child Child = new child();
Child.func();
child.number = 1;
}
}
public class child extends Parent {
protected int number;
public void func(){
System.out.println("Child func()");
}
}
: child.number = 1; 이렇게 사용하는 것은 불가능
자식클래스에 protected로 선언 시 접근 가능한 예
public class MianClass {
public static void main(String[] args) {
child Child = new child();
Child.func();
}
}
public class Parent {
protected String name;
}
package cls;
public class child extends Parent {
public void func(){
name = "홍길동"; // 부모클래스에서 protect했으므로 자식클래스에서 접근 가능
System.out.println("Child func()");
}
}
: 코드처럼 Mian클래스에서 func() 함수 호출
: Parent(부모클래스)에서 protected로 선언해놔서 child(자식클래스)에서 접근 가능
Over Ride
: 상속 받은 클래스에서 고쳐(추가) 기입
public class MianClass {
public static void main(String[] args) {
// 원래 이렇게 씀
child Child = new child();
Child.method();
// 이렇게도 됨
Parent parent = new child();
parent.method();
parent.func(); // 이건 에러 발생
}
}
public class Parent {
public void method(){
System.out.println("Parent method()");
}
}
public class child extends Parent {
// over ride
public void method(){
System.out.println("Child method()");
}
}
Parent parent = new child() : 이렇게하면 parent 클래스 메서드가 아닌 child 클래스 메서드가 호출 된다.
parent.func() : 이건 접근 불가능(자식에는 있지만 부모에는 없는 메서드라서)
'Java' 카테고리의 다른 글
Java) 객체지향 프로그래밍 : 상속성 및 다형성(3) (0) | 2025.01.09 |
---|---|
Java) 객체지향 프로그래밍 : 상속성 및 다형성(2) (0) | 2025.01.08 |
Java) 생성자(constructor)와 객체 생성 및 초기화 (0) | 2025.01.06 |
Java) 메서드 오버로딩과 가변 인수 (0) | 2025.01.06 |
Java) this 키워드 역할과 사용법 (0) | 2025.01.06 |