Java - 상속(2) - super()
2020. 8. 23. 10:21ㆍJava/Java
반응형
한 클래스에서 생성자를 호출하기 위해서 this()를 사용하였다.
만약 상속의 관계에 있는 경우 부모 클래스의 생성자를 호출하는 방법이 있다.
바로, super를 사용하는 것이다.
class A extends B{
A(){
super();
}
}
class B {
System.out.println("B");
}
위와 같은 코드에서 A를 호출한다면 A의 생성자에 있는 super()은 부모 클래스인 B의 생성자를 호출한다.
결국 console에 B가 출력 될 것이다.
더 복잡한 코드이다. 주석에 써놓은 숫자 순서대로 실행이 된다.
예제 1.
class Parent extends Object { //상속관계 =>object()호출 (3) (9)
public Parent() {
super();//(2) (8)
System.out.println("난 parent 기본생성자 호출됨!");//(4) (10)
}
@Override //어노테이션
public String toString() {
// TODO Auto-generated method stub
return "내용을 변경하고 싶다.";
}
}
//class Child extends Object
class Child extends Parent{
public Child() {
super();//(7)
System.out.println("난 Child 기본생성자 호출됨!");//(11)
}
}
public class Inheritest extends Object {
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent p=new Parent();//(1)
System.out.println("p=>"+p);//(5)
System.out.println("p.toString()=>"+p.toString());
Child c=new Child();//(6)
System.out.println("c=>"+c);//(12)
System.out.println("c.toString()=>"+c.toString());
}
}
예제 2.
public class SuperTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
C c=new C("홍길동");//1)
}
}
class A extends Object{ //Object(){}//(5)
public A() {
super();//(4)
System.out.println("난 A의 생성자 호출됨!");//(6)
}
}
class B extends A{
public B() {
super();//
System.out.println("난 B의 생성자 호출됨!");//
}
//추가
public B(String s) {
super();//(3)
System.out.println(s);//7) 홍길동
}
}
class C extends B{
public C() {
System.out.println("난 C의 생성자 호출됨!");
}
public C(String s) {//홍길동
super(s);//(2) 기본생성자는 생략이 가능->인수가 있는 생성자는 호출->반드시 선언해야한다
System.out.println(s);// 8) 홍길동
}
}
상속을 받은 자식 클래스에서 super()을 통해서 부모의 생성자를 호출했다.
super()은 부모의 객체를 가르키는 방법이다. 이를 통해서 부모 객체의 변수 및 메서드를 호출 가능하다.
자식 클래스에서 super().메서드이름 으로 부모 클래스의 메서드를 호출 할 수 있다.
예제 코드
class Person {
String name;
int age=20;//default값 적용
void print() {
System.out.println("person 메서드호출=>"+name);
}
}
class Man extends Person {
int age=40;//상속을 받은 멤버변수와 같은 이름의 변수를 한번더 자식클래스에 선언가능
/*
*
String name;
int age=20;//default값 적용
void print() {
System.out.println("person 메서드호출=>"+name);
}
*/
void print() {
System.out.println("자식클래스의 age=>"+this.age);//40->Man의 age
System.out.println("부모클래스의 age=>"+super.age);//20=>부모클래스객체.멤버변수
//System.out.println("name의 저장된값=>"+name);//super.부모의 메서드호출
super.print();
}
}
public class SuperTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Man m=new Man();
m.name="홍길동";
m.print();//오버라이딩한 메서드 print() 호출된다.
}
}
반응형
'Java > Java' 카테고리의 다른 글
Java - final (0) | 2020.08.23 |
---|---|
Java - 접근지정자 (0) | 2020.08.23 |
Java - 상속(1) (0) | 2020.08.23 |
Java - 배열 (0) | 2020.08.23 |
Java - this (0) | 2020.08.21 |