답 - 1.자바는 다중 상속을 허용한다.
자바는 단일상속을 원칙으로 한다.
답 - 2.부모 객체는 항상 자식 타입으로 강제 타입 변환된다.
변환 될 수 있다.
답 - 1. final클래스는 부모 클래스로 사용할 수 있다.
final이 붙은 클래스는 상속이 불가능하다. 따라서 부모 클래스로 사용할 수 없다.
답 - 4. protected 접근 제한을 갖는 메소드는 다른 패키지의 자식클래스에서 재정의할 수 없다.
protected 접근제한자는 같은 패키지 내 또는 자식클래스라면 다른 패키지에서도 재정의 할 수 있다.
Parent.java
public class Parent{
public String name;
public Parent(String name){
this.name = name;
}
}
Child.java
public class Child extends Parent{
private int studentNo;
public Child(String name, int studentNo){
this.name = name;
this.studentNo = studentNo;
}
}
답 - 자식클래스에서 부모 클래스를 호출하지를 않았다.
Parent.java
public class Parent{
public String nation;
public Parent(){
this("대한민국");
System.out.println("Parent() Call");
}
public Parent(String nation){
this.nation = nation;
System.out.println("Parent(String nation) call");
}
}
Child.java
public class Child extends Parent{
private String name;
public Child(){
this("홍길동");
System.out.println("Child() call");
}
public Child(String name){
this.name = name;
System.out.println("Child(String name) call");
}
}
ChildExample.java
public class ChildExample{
public static void main(String[] args){
Child child = new Child();
}
}
해설 - Child객체를 생성했는데 Child클래스가 Parent클래스를 상속받고 있으므로 Parent 생성자로 먼저 초기화를 진행한다
그래서 기본 생성자를 수행하는 도중 this()를 만나서 Parent(String nation)을 먼저 수행한다. 다음에 Parent()를 수행한다. 그리고 Child 생성자를 수행하는데 여기서도 기본 생성자인 Child() 에서 this("홍길동")
를 부르기 때문에 Child(String name) 호출 후 Child()를 수행한다.
답 - Parent(String nation) call
=> Parent() call
=> Child(String name) call
=> Child() call
Tire.java
public class Tire{
public void run(){
System.out.println("일반 타이어가 굴러갑니다.");
}
}
SnowTire.java
public class SnowTire extends Tire{
@Override
public void run(){
System.out.println("스노우 타이어가 굴러갑니다.");
}
}
SnowTireExample.java
public class SnowTireExample{
public static void main(String[] args){
SnowTire snowTire = new SnowTire();
Tire tire = snowTire;
snowTire.run();
tire.run();
}
}
답 - "스노우 타이어가 굴러갑니다." "스노우 타이어가 굴러갑니다."
해설 - snowTire.run()은 Tire 클래스의 구현객체이므로 Override한 "스노우 타이어가 굴러갑니다." 를 수행한다.
tire.run()은 tire는 tire클래스를 구현하고있는 snowTire를 넣어 초기화를 시켜줬기 때문에 tire.run()도 마찬가지로 "스노우 타이어가 굴러갑니다." 를 수행한다.