상속 (부모꺼 갖다쓰기)
상속은 Java에서 객체 지향 프로그래밍(OOP)의 기본 개념 중 하나입니다. 이를 통해 클래스는 수퍼 클래스 또는 부모 클래스라고 하는 다른 클래스의 속성과 동작을 상속할 수 있습니다.
슈퍼클래스에서 상속되는 서브클래스를 정의하기 위해 클래스 정의에서 extends 키워드를 사용합니다. 그런 다음 서브클래스는 슈퍼클래스의 속성과 메서드를 자신의 것처럼 사용할 수 있습니다. 예를 들면 다음과 같습니다.
public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("Animal is eating");
}
public void sleep() {
System.out.println("Animal is sleeping");
}
}
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
public void bark() {
System.out.println("Dog is barking");
}
}
Dog dog = new Dog("Max", 3);
dog.eat(); // prints "Animal is eating"
dog.sleep(); // prints "Animal is sleeping"
dog.bark(); // prints "Dog is barking"
이 예제에서 Dog 클래스는 Animal 클래스에서 상속됩니다. Dog 클래스는 name, age, eat() 및 sleep() 메서드와 같은 Animal 클래스의 속성 및 메서드에 액세스할 수 있습니다. Dog 클래스는 또한 Animal 클래스에 없는 새로운 메서드 bark()를 추가합니다.
상속은 코드 재사용을 촉진하고 코드를 모듈화하고 유지 관리하기 쉽게 만듭니다. 이를 통해 다른 클래스의 특수 버전인 클래스를 생성하고 코드를 복제하지 않고 새로운 기능을 추가할 수 있습니다. 또한 슈퍼 클래스와 하위 클래스 간의 관계와 같은 실제 관계를 반영하는 클래스의 계층 구조를 만들 수 있습니다.
super (부모 변수/메소드 호출)
Java에서 super 키워드는 부모 클래스 또는 하위 클래스의 슈퍼 클래스를 참조하는 데 사용됩니다. 하위 클래스에서 상위 클래스의 메서드, 변수 및 생성자를 액세스하고 호출하는 데 사용됩니다.
다음은 Java에서 super 키워드를 사용하는 방법에 대한 몇 가지 예입니다.
부모 클래스 변수 접근
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
public class Dog extends Animal {
private int age;
public Dog(String name, int age) {
super(name); // call the constructor of the parent class
this.age = age;
}
public void printDetails() {
System.out.println("Name: " + super.name + ", Age: " + this.age);
}
}
이 예에서 Dog 클래스는 Animal 클래스를 확장하고 새 변수 age를 추가합니다. Dog 클래스의 생성자에서 super(name)을 사용하여 부모 클래스의 생성자를 호출하여 Animal 클래스의 이름 변수를 설정합니다. Dog 클래스의 printDetails() 메서드에서 super.name을 사용하여 Animal 클래스의 이름 변수에 액세스합니다.
부모 클래스 메서드 호출
public class Animal {
public void makeSound() {
System.out.println("Generic animal sound");
}
}
public class Dog extends Animal {
public void makeSound() {
super.makeSound(); // invoke the makeSound() method of the parent class
System.out.println("Woof woof");
}
}
이 예제에서 Dog 클래스는 Animal 클래스의 makeSound() 메서드를 재정의하여 새 사운드를 추가합니다. Dog 클래스의 makeSound() 메서드 내에서 super.makeSound()를 사용하여 새 사운드를 추가하기 전에 부모 클래스의 makeSound() 메서드를 호출합니다.
부모 클래스 생성자 호출
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
public class Dog extends Animal {
private int age;
public Dog(String name, int age) {
super(name); // call the constructor of the parent class
this.age = age;
}
}
이 예에서 Dog 클래스는 Animal 클래스를 확장하고 새 변수 age를 추가합니다. Dog 클래스의 생성자에서 super(name)을 사용하여 부모 클래스의 생성자를 호출하여 Animal 클래스의 이름 변수를 설정합니다. 이는 name 변수가 Animal 클래스에서 보호된 것으로 선언되고 Dog 클래스에서 직접 액세스할 수 없기 때문에 필요합니다.
'개발 > Java' 카테고리의 다른 글
[Android, Java] Main Thread에서 sub Thread 로 값 넘겨주기 (0) | 2023.04.10 |
---|---|
[Java] 추상화란 (0) | 2023.03.03 |
[Java] 다형성(polymorphism) 이란 (0) | 2023.03.03 |
[Java] src 와 bin 의 차이점과 eclipse 는 구체적으로 무슨일을 하는가 (0) | 2022.11.10 |
[Java] 환경변수의 정의, 여러 폴더에 나뉘어있는 class 실행시키기 (0) | 2022.11.10 |