java 继承练习题_Java继承 练习题
第一題
/*
看程序寫結果:
A:成員變量就近原則
B:this和super的問題
this訪問本類的成員
super訪問父類的成員
C:子類構造方法執行前默認先執行父類的無參構造方法
D:一個類的初始化過程
成員變量進行初始化
默認初始化
顯示初始化
構造方法初始化 ? ??用參數去調用構造函數就是顯式初始化,沒有參數就是默認初始化,表現為直接聲明對象和數組
所以執行父類無參構造方法前會先執行成員變量的初始化,public int num = 10;,再執行無參構造方法,同理,執行完父類無參構造方法,再執行子類成員變量的初始化,public int num = 20;最后執行子類構造方法。
結果:
fu
zi
30
20
10
*/
class Fu{
public int num = 10;//public int num;這是第一步,不賦值,默認為0,稱為默認初始化;第二步,把10賦予給num,這一步稱為顯式初始化,每個成員變量賦值都會在jvm的堆內存執行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //這樣的兩個步驟。
public Fu(){
System.out.println("fu");
}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
System.out.println("zi");
}
public void show(){
int num = 30;
System.out.println(num); //30
System.out.println(this.num); //20
System.out.println(super.num); //10
}
}
class ExtendsTest {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
題目2
/*
看程序寫結果:
A:一個類的靜態代碼塊,構造代碼塊,構造方法的執行流程
靜態代碼塊 > 構造代碼塊 > 構造方法
B:靜態的內容是隨著類的加載而加載
靜態代碼塊的內容會優先執行
C:子類初始化之前先會進行父類的初始化
結果是:
靜態代碼塊Fu
靜態代碼塊Zi
構造代碼塊Fu
構造方法Fu
構造代碼塊Zi
構造方法Zi
*/
class Fu {
static {
System.out.println("靜態代碼塊Fu");
}
{
System.out.println("構造代碼塊Fu");
}
public Fu() {
System.out.println("構造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("靜態代碼塊Zi");
}
{
System.out.println("構造代碼塊Zi");
}
public Zi() {
System.out.println("構造方法Zi");
}
}
class ExtendsTest2 {
public static void main(String[] args) {
Zi z = new Zi();
}
}
問題三
/*
看程序寫結果:
A:成員變量的問題
int x = 10; //成員變量是基本類型
Student s = new Student(); //成員變量是引用類型
B:一個類的初始化過程
成員變量的初始化
默認初始化
顯示初始化
構造方法初始化
C:子父類的初始化(分層初始化)
先進行父類初始化,然后進行子類初始化。
結果:
YXYZ
問題:
雖然子類中構造方法默認有一個super()
初始化的時候,不是按照那個順序進行的。
而是按照分層初始化進行的。
它僅僅表示要先初始化父類數據,再初始化子類數據。
*/
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Y y = new Y();
Z() {
//super();
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
總結
以上是生活随笔為你收集整理的java 继承练习题_Java继承 练习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ofo上线广告业务怎么回事 开锁之前先
- 下一篇: oracle不维护java_宣布 Jav