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