자바 객체 지향 14_super 키워드

그것은 서브 - 저장 공간에 직접적인 부모 슈퍼 클래스 오브젝트 레퍼런스 또는 상위 클래스 객체 슈퍼 클래스 객체로 이해 될 수있다. 우리는 슈퍼에 포함 클래스 이불에 부모 클래스의 메서드 나 속성에 액세스 할 수 있습니다, 슈퍼 키워드는 사용이 매우 유사하다.

1.super 키워드

슈퍼 즉시 부모 클래스의 객체 참조로 이해 될 수있다, 당신은 하위 클래스 슈퍼 적용 상위 클래스의 메서드 나 속성에 접근, 슈퍼 매우 유사 키워드를 사용할 수 있습니다.

[실시 예] 슈퍼 키워드

class Parent {
	String name = "父类";
	public void study() {
		System.out.println("父类中的study方法");
	}
}
class Child extends Parent {
	public void show() {
		// 调用父类的成员方法
		super.study();
		// 调用父类的成员变量
		System.out.println("name:" + super.name);
	}
}
public class SuperDemo extends Parent {
	public static void main(String[] args) {
		new Child().show();
	}
}

서브 클래스는 부모 클래스의 멤버 변수를 상속 할 수 있으며, 서브 클래스에서 같은 이름의 멤버 변수의 부모가있는 경우, 즉 멤버 변수의 서브 클래스는 부모 클래스의 같은 이름의 멤버 변수 마스크, 현상 숨겨져 있습니다. 당신은 하위 클래스에서 같은 이름의 부모 클래스의 멤버 변수에 액세스하려면, 당신은 참조로 슈퍼 키워드를 사용해야합니다.

상위 클래스의 멤버 메소드 서브 클래스는 클래스와 같은 이름의 부모 클래스 메소드의 구성원에 아이가있는 경우, 상속 할 수 있습니다 커버라고, 부모 클래스를 덮어 쓰게됩니다 같은 이름의 멤버 인 서브 클래스 방법의 회원. 당신이 하위 클래스에서 상위 클래스 메소드의 구성원으로 같은 이름에 액세스하려면, 당신은 참조로 슈퍼 키워드를 사용해야합니다.

참고 : 직접, 전용 멤버 변수와 서브 클래스에서 멤버 방법과 수정 된 부모 클래스에 액세스 할 수 없습니다 클래스 가시성의 개인 부분 때문이다.

부모 클래스의 생성자를 호출 1.super

서브 클래스의 생성자의 생성자는 부모 클래스 디스플레이를 호출하지 않는 경우, 서브 클래스 상속은 부모 클래스, 하위 클래스 생성자는 부모 클래스의 생성자를 호출해야합니다, 시스템 기본 인수 없음의 생성자는 부모 클래스를 호출합니다.

[실시 예]에있어서의 기본 구성 파라미터는 상위 클래스를 호출

class Parent {
	public Parent() {
		System.out.println("parent 构造方法");
	}
}
class Child extends Parent {
	public Child() {
		// 如我们没有显示的使用super(),那么会默认调用父类的无参构造方法
		System.out.println("Child 构造方法");
	}
}
public class SuperDemo {
	public static void main(String[] args) {
		// 创建子类对象,父子类构造方法都执行!!!!
		new Child();
	}
}

부모 클래스를 호출 지정하려면 생성자의 매개 변수가 매개 변수가 만찬 () 생성자는 상위 클래스라고 지정하고, 생성자의 첫 번째 문이어야합니다 추가 할 수 있습니다.

[실시 예] 부모 클래스 생성자를 호출 지정된

class Parent {
	String name;
	public Parent() {} // 无参构造方法建议加上!!!
	public Parent(String name) {
		this.name = name;
		System.out.println("parent 构造方法");
	}
}
class Child extends Parent {
	int age;
	public Child(String name, int age) {
		// super(形参列表) 必须放在构造方法的第一行
		super(name);
		this.age = age;
		System.out.println("Child 构造方法");
	}
	void show() {
		// 输出:name:小明 age:18
		System.out.println("name:" + name + " age:" + age);
	}
}
public class SuperDemo {
	public static void main(String[] args) {
		Child child = new Child("小明", 18);
		child.show();
	}
}

슈퍼 ()이 () 생성자 호출 요약 :

  1. 슈퍼 () : 부모 클래스 생성자의 메서드 Invoke (생성자의 첫 번째 문이어야 함).

  2. 이 () 생성자 메서드 호출이 클래스 (생성자는 첫 번째 문이어야 함).

슈퍼 ()와이 (슈퍼 ()이 ()가 동일한 구성 방법에서 동시에 발생할 수 없습니다에 의해 입증), 첫 번째 문이어야합니다, 이유는 부모 클래스 액세스 자식 클래스 전에 완료를 보장하는 슈퍼 ()이다 상위 클래스의 초기화,이 ()는 부모 클래스의 초기화의 고유성을 보장하기 위해.

  • 이 요약 및 슈퍼

이 슈퍼 매우 유사 사용하지만, 세부 사항은 다음 표를 참조하십시오의 성능은 매우 다르다.

차이의 포인트 감독자
정의 본이 클래스 오브젝트 참조 대표 슈퍼 부모 클래스의 저장 공간을 대신
용도 이.이 때문이다.이 방법을 () 슈퍼. 속성 슈퍼. 방법 () 슈퍼 ()
생성자를 호출 첫 번째 문에이 클래스의 생성자 호출, 첫 번째 문에, 부모 클래스의 생성자를 호출
이처럼 보이는 시작, 당신은 부모 클래스를 찾을 수 찾을 수 없습니다 직접 부모 찾기, 아이처럼 보이지 않는

객체 메모리 분석을 생성합니다

public static void main(String[] args) {
	Child child = new Child("小明", 18);
}

프로그램이 첫 번째 문의 주요 메소드를 실행하면, 변수 아이를 생성하는 스택 공간의 첫 번째는, 아이의 첫 번째 주소 변수는 새로 생성 된 오브젝트를 개최합니다.

때문에 부모 자식 클래스의 상속 클래스와 상위 클래스, Object 클래스에서 상속 그래서 우리는 새로운 대상이있을 때 때 아이, 부모 개체 객체와 객체를 포함 할 것이다 자식 개체.

는 멤버 변수의 이름이 상위 클래스의 초기화에 표시되지 않기 때문에, 객체에 포함 된 어떤 객체의 멤버 변수와 멤버 부모 변수 이름을 객체없는 그에게 시스템 기본값은 null로 초기화.

하위 클래스는 동안 (Object 클래스, 속성이없는) 부모 클래스 이름 속성을 상속, 우리가있을 때 그는 혼자 정의하는 세 속성, 그래서 새로운 서브 클래스는 객체가 다음 두 가지 속성이있을 것이다, 하나의 객체 그것은 이름 아래 아버지로부터 상속, 다른 하나는 그의 나이이다. 회원의 서브 클래스 시대의 변수 컴파일러가 0으로 초기화되도록 기본값으로 초기화 표시되지 않습니다. 이때, 상기 메모리 배치는 아래와 같이 :
그림 삽입 설명 여기
새로운 객체를 벗어나면, 이것의 목적은 기준 물체 자체에 이러한 기준 지점을 생성한다. 새 개체가 아이의 클래스 객체를 벗어나면,이 서브 클래스의 객체는 내부에이 슈퍼 부모의 저장 공간 내부의 현재 객체에 대한 슈퍼 기준점이 될 것입니다.

객체를 만든 후에 시작하는 생성자를 호출합니다. 첫 번째 문은 슈퍼 (이름)이기 때문에 첫째, 서브 클래스의 생성자를 입력 그래서 부모 클래스의 생성자를 입력, 부모 클래스의 초기화 멤버 변수를 할 첫 번째 자식에의 서브 클래스에서 다음 시공 방법 클래스 멤버 변수는 초기화를. 아래에 도시 된 바와 같이, 이때, 메모리 레이아웃 :
그림 삽입 설명 여기

PS : 최신 무료 문서 및 교육용 비디오를 들어, QQ 그룹 (627,407,545)를 추가하십시오 수신.

게시 55 개 원래 기사 · 원의 칭찬 0 · 조회수 795

추천

출처blog.csdn.net/zhoujunfeng121/article/details/104600410