Java Module 동적 바인딩
Java Module 동적 바인딩
상편 회고: 다중태는 대상을 대상으로 하는 프로그램 설계의 매우 중요한 특성으로 프로그램이 더욱 좋은 가독성과 확장성을 가지도록 한다.
참조 변수 유형
인용 형식의 변수는 두 가지 종류가 있는데 그것이 바로 컴파일할 때와 실행할 때이다.(성명 유형과 실제 유형이라고도 부른다) 간단한 예를 들자.
// Student Person
Person p = new Student();
컴파일 시 유형
Person
은 변수 p를 인용하는 컴파일링 시 유형이다.런타임 유형
Student
은 인용 변수 p의 운행 시 유형이다.방법 바인딩
방법을 같은 방법의 주체와 연결시키는 것을 귀속이라고 한다.
정적 바인딩
프로그램이 실행되기 전에 귀속을 하는 것을 정적 귀속이라고 하고 전기 귀속이라고도 한다.프로세스를 위한 언어에서는 기본 귀속 방식입니다.
자바에서 private, static,final로 수식하는 방법 (static와final은 다음에 정리할 것) 이나 구조기가 컴파일러에게 어떤 방법을 호출할 수 있는지 정확하게 할 수 있는 것은 정적 연결 (static binding) 이다.
동적 바인딩
실행할 때 대상의 운행 시 유형에 따라 귀속을 하는데 동적 귀속이라고 하고 후기 귀속이라고도 한다.물론 자바에서 정적 귀속 방법을 제외하고 다른 방법의 호출 방식은 동적 귀속이다.
public class DynamicBinding {
//Object , ,
public static void test(Object x) {
System.out.println(x.toString());
}
public static void main(String[] args) {
test(new PrimaryStudent());//Student
test(new Student());//Student
test(new Person());//Person
test(new Object());//java.lang.Object@1b6d3586
}
}
class Person extends Object {
@Override
public String toString() {
return "Person";
}
public void run(){}
public void count(int a){}
}
class Student extends Person {
@Override
public String toString() {
return "Student";
}
public void jump(){}
}
class PrimaryStudent extends Student {
}
Object
이다.주의: 인용 변수는 컴파일할 때 형식이 가지고 있는 방법만 호출할 수 있습니다.방법표
우리는
test(new PrimaryStudent());
의 운행 결과Student
도 발견할 수 있다. 결과는 매우 뚜렷하다. PrimaryStudent
클래스에 부류를 다시 쓰는 방법이 없기 때문이다. 만약에 동적 귀속 방식으로 호출하는 방법을 사용한다면 가상 기회는 우선 이 클래스에서 적합한 방법을 찾고 없으면 부류로 찾을 때까지 계속 찾을 것이다.그러면 매번 호출할 때마다 위로 찾아야 하기 때문에 시간적 비용이 많이 들 수밖에 없다.이 가상 기기는 모든 클래스에 방법표를 만들었는데 그 중에서 모든 방법 서명(반환값 유형은 포함되지 않음)과 실제 호출 방법을 열거했다. 그러면 호출 방법에 대해 직접 표를 찾으면 된다.(특히 슈퍼로 부류를 한정적으로 호출하면 실제 부류의 표에서 직접 찾을 수 있다)
Person
류의 방법표: Person:
// Object
//xxx()-> Object.xxx()
// ->
toString()->Person.toString()
run()->Person.run()
count(int)->Person(int)
Student
류의 방법표: Student:
// Object
//xxx()-> Object.xxx()
// ->
toString()->Student.toString()
jump()->Student.jump()
run()->Person.run()
count(int)->Person(int)
PrimaryStudent
류의 방법표(PrimaryStudent
류는 공, 직접 계승Student
류): PrimaryStudentt:
// Object
//xxx()-> Object.xxx()
// ->
toString()->Student.toString()
jump()->Student.jump()
run()->Person.run()
count(int)->Person(int)
test(new PrimaryStudent());
문장을 실행할 때 가상 컴퓨터는 PrimaryStudent
의 방법표를 추출할 것이다.toString
가 서명한 클래스를 검색할 것이다.이때 가상 컴퓨터는 Student
유형의 toString()
방법을 호출해야 한다는 것을 이미 알고 있었다.동적 귀속은 프로그램의 확장성을 크게 향상시켰다. 예를 들어 나는 지금
Teacher
클래스를 추가하려고 한다. Teache
r클래스를 Person
클래스에 직접 계승하고 Object
클래스의 인용 지향Teacher
대상을 사용하려고 한다. 다른 코드 조정을 하지 않아도 동적 귀속이 자동으로 해결되면 상당히 편안하다.참고서적: Thinking in Java, Java 핵심 기술 볼륨 I
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.