我寫了這個代碼:我需要知道什麼是控制流程,以及這段代碼究竟發生了什麼?
class A {
int a;
void method() {
System.out.println("Overridden method of Class A called!");
}
void method2() {
System.out.println("Normal Method of Class A called!");
}
}
class B extends A {
int b;
void method() {
System.out.println("Overridden method of Class B called!");
}
void method1() {
System.out.println("Normal Method of Class B called!");
}
}
class C {
public static void main(String[] args) {
A a1 = new A();
B b1 = new B();
a1 = b1; // ***Line 1***
System.out.println("After referencing!");
a1.method();
a1.method2();
A a2 = new B(); // ***Line 2***
a2.method();
a2.method2();
}
}
1號線和2號線在上面的代碼中打上了意見
現在,我對的1號線的物理意義的一些想法,但究竟是什麼第2行是什麼意思? 內存是如何分配給對象'a2'的A型?這個對象的本質和行爲是什麼?它與正常實例有什麼不同?是否線1和線2表達相同的意思?如果是這樣,怎麼樣?如果不是,他們有什麼不同,因爲他們顯然是相同的產出。
首先要注意的是術語。 'a2'不是一個對象,它是一個變量。它的價值是一個參考。引用指的是一個「B」類型的對象,但該引用可以賦值給一個類型爲「A」的變量。一旦你把術語分類了,其餘的很多東西都會更有意義。 –
我知道這裏的a2只是一個變量,並且保存了內存堆中的一個對象的引用,但是如果您可以請稍微詳細一點。 – Ozil
下面是一個關於值和引用如何在Java中工作的教程:http://www.javaranch.com/campfire/StoryCups.jsp – Nayuki