/// 신입 기술 면접에 많이 나옴

: 클래스의 상속 관계에게 자식 클래스가 부모 클래스를 가리키는 예약어
///this랑 비교해서 공부





package override;
class Hello {
public void say() {
System.out.println("hello");
}
}
class English extends Hello {
}
class Korean extends Hello {
public void say() {
System.out.println("인녕하세요");
}
}
public class Main01 {
public static void main(String[] args) {
// 자식 클래스에 구현된 메서드가 없기 때문에, 부모 클래스에 정의된 메서드를 찾아가게 됨
English e = new English();
e.say();
// 자식 클래스가 부모와 같은 이름의 메서드를 정의하고 있기 때문에 k객체에게는 부모 클래스가 정의하고 있는 say()메서드가 가려지게 됨
// 자식의 메서드가 우선시
Korean k = new Korean();
k.say();
}
}
package override;
class Parent {
public Parent(String msg) {
System.out.println(msg);
}
}
class Child extends Parent {
// 부모 생성자를 강제 호출
// : 생성자가 정의된 클래스를 상속받은 경우에는 자식 클래스의 생성자를 통해서 부모 생성자를 강제로 호출
// - 부모의 생성자를 호출하는 방법은 super 키워드를 메서드 이름으로 사용하는 것
// - 부모와 동일한 파라미터를 받도록 생성자를 정의하고, 전달받은 파라미터를 부모에게 재전달한다
public Child(String msg) {
super(msg);
}
}
public class Main02 {
public static void main(String[] args) {
}
}
package override;
public class Unit {
private String name;
public Unit(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void attack () {
System.out.println(this.name + " >> 공격 준비");
}
public void nucleus() {
System.out.println(this.name + " >> 핵미사일 공격");
}
public void bombing() {
System.out.println(this.name + " >> 폭격 시작");
}
}
package override;
public class AirForce extends Unit{
public AirForce(String name) {
super(name);
}
@Override
public void attack () {
super.attack();
System.out.println(super.getName() + " >> 공중 공격 실행");
}
public void bombing() {
System.out.println(super.getName() + " >> 폭격");
}
}
package override;
public class Army extends Unit{
public Army(String name) {
super(name);
}
@Override
public void attack () {
super.attack();
System.out.println(super.getName() + " >> 지상 공격 실행!");
}
public void tank() {
System.out.println(super.getName() + " >> 탱크 공격!");
}
}
package override;
public class Navy extends Unit{
public Navy(String name) {
super(name);
}
@Override
public void attack () {
super.attack();
System.out.println(super.getName() + " >> 어뢰 발사!");
System.out.println(super.getName() + " >> 지상 상륙");
}
public void nucleus() {
System.out.println(super.getName() + " >> 탱크 공격!");
}
}
package override;
public class Main03 {
public static void main(String[] args) {
Army am = new Army("육군");
am.attack();
am.tank();
Navy na = new Navy("해군");
AirForce ai = new AirForce("공군");
na.attack();
na.nucleus();
ai.attack();
ai.bombing();
}
}