반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

java.super/this 본문

[IT]/java

java.super/this

givemebro 2021. 2. 26. 16:18
반응형

super : 부모를 가르키는 자바 키워드

package step8;
class Person{
	String name = "사람이름";
	public void study() {
		System.out.println("사람이 공부하다.");
	}
}

class Student extends Person{
	String name = "학생이름";
	public void test() {
		System.out.println(this.name);
		System.out.println(super.name);
	}
}
public class TestSuper1 {
	public static void main(String[] args) {
		Student s = new Student();
		s.test();
	}

}

/*
 * 학생이름 
 * 사람이름
 */

 


 

super() : 부모 생성자를 호출하여 부모 객체를 생성
> 생성자를 명시하지 않으면 기본 생성자가 삽입되고 삽입되는 첫번째 실행문으로  super()가 자동 삽입됨
> 생성자를 명시하더라도 별도의  super() 구문을 명시하지 않으면 컴파일러가 자동 삽입

>이런 원리로 상속 관계에 있는 부모클래스는 자식 객체가 생성되기 전에 부모 클래스의 생성자가 먼저 실행되어 부모 객체 생성 후 자식 객체를 생성하게 됨

class Animal{}
class Person extends Animal{}
// Person(){super();} <이걸 안 해도 자동 생성됨

/*
	new Person()이 실행되면
	Animal (부모 객체)부터 생성되고
    Person 객체가 heap 영역에 생성됨
*/

 

package step9;

class GrandParent { // extends Object : 상속관계가 없는 클래스는 object를 상속받게 된다.
	GrandParent() {
		System.out.println("GrandParent 생성자 실행되어 객체 생성");
	}
}

class Parent extends GrandParent {
	Parent() {
		super();
		System.out.println("Parent 생성자 실행되어 객체 생성");
	}
}

class Child extends Parent {
	Child() {
		/* super(); */
		System.out.println("Child 생성자 실행되어 객체 생성");
	}
}

public class TestSuper2 {
	public static void main(String[] args) {
		new Child();

	}
}

 

 

 

java.Inheritance(상속)

상속(Inheritance) : 부모 멤버(속성, 기능)를 자식이 물려받아 재사용 > 계층구조를 형성해 다형성(Polymorphism)을 적용한 환경을 제공 is a relationship(UML : class diagram에서는 generalization) > 사람은..

broscoding.tistory.com

 

 

 

package step2;
// super() 를 명시해야하는 경우의 예제
class Animal{
	int age;
	Animal(int age){
		this.age=age;
	}
}
class Person extends Animal{
	String name;
	//Person(){super();} > 이경우에는 error 이유 : Animal에는 기본 생성자가 없기 때문
	Person(int age, String name){
		super(age); // 명시적으로 super를 호출해 매개변수에 맞는 인자값을 입력해야함
		this.name=name;
	}
}
반응형

'[IT] > java' 카테고리의 다른 글

java.overriding.toString  (0) 2021.03.02
java.Object(오브젝트 클래스)  (0) 2021.03.02
java.Overriding(메서드 오버라이딩)  (0) 2021.03.02
java.분석 설계  (0) 2021.03.02
java.Access Modifier(접근 제어자)  (0) 2021.02.26
java.Inheritance(상속)  (0) 2021.02.26
java.overloading(오버로딩)  (0) 2021.02.26
java.Array(배열)  (0) 2021.02.26
Comments