class Animal {
protected String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void onomatopoeia() {
System.out.println(name+" 멍멍");
}
}
public class SampleInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.onomatopoeia();
}
}
poppy
poppy 멍멍
이렇게 코드 내에서 set을 사용해서 접근제어자로 제한둔 것을 임의로 풀 수 있다
이는 어노테이션 @setter을 사용하는 것과 동일한데
import lombok.Setter;
@Setter
class Animal {
protected String name;
}
class Dog extends Animal {
void onomatopoeia() {
System.out.println(name+" 멍멍");
}
}
public class SampleInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.onomatopoeia();
}
}
poppy
poppy 멍멍
setName 메서드를 지워도 컴파일 오류가 나지 않고 setName을 사용할 수 있다
그러면 여기서 의문이 생긴다
그냥 dog.name 을 사용하면 안되나
해보자
import lombok.Setter;
@Setter
class Animal {
protected String name;
}
class Dog extends Animal {
void onomatopoeia() {
System.out.println(name+" 멍멍");
}
}
public class SampleInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "poppy";
System.out.println(dog.name);
dog.onomatopoeia();
}
}
poppy
poppy 멍멍
이 또한 컴파일 오류가 나지 않고 가능하다
(상속에 대해 추가적으로 알고 싶다면 아래 링크를)
https://velog.io/@t0de4r55/05-05-상속