??個(gè)人主頁(yè):?Aileen_0v0
??系列專欄:Java學(xué)習(xí)系列專欄
??個(gè)人格言:"沒(méi)有羅馬,那就自己創(chuàng)造羅馬~"
1.Judging right from wrong
(inheritance)
1.A?child class inherits everything from its parent class.
2.A?child class cannot inherit the constructors from its parent class .
子類繼承的內(nèi)容:
字段(成員變量):
子類會(huì)繼承父類的字段,包括實(shí)例變量和靜態(tài)變量。子類可以直接訪問(wèn)繼承而來(lái)的字段。
方法:
子類會(huì)繼承父類的方法,包括實(shí)例方法和靜態(tài)方法。子類可以直接調(diào)用繼承而來(lái)的方法。
子類可以重寫(xiě)(override)父類的方法,以提供特定于子類的實(shí)現(xiàn)。
構(gòu)造方法:
如果子類沒(méi)有定義構(gòu)造方法,它會(huì)默認(rèn)調(diào)用父類的無(wú)參構(gòu)造方法(如果父類有的話)。
如果子類定義了構(gòu)造方法,可以使用?super
?關(guān)鍵字調(diào)用父類的構(gòu)造方法。
接口的實(shí)現(xiàn):
如果父類實(shí)現(xiàn)了某個(gè)接口,子類也會(huì)繼承該接口的實(shí)現(xiàn),除非子類明確地重新實(shí)現(xiàn)了該接口。
子類不繼承的內(nèi)容:
私有成員:
子類不會(huì)繼承父類中的私有成員(私有字段、私有方法)。
構(gòu)造方法:
子類不會(huì)繼承父類的構(gòu)造方法。但是,子類可以通過(guò)使用?super
?調(diào)用父類的構(gòu)造方法來(lái)初始化繼承的部分。
父類的靜態(tài)成員:
子類不會(huì)繼承父類的靜態(tài)成員。靜態(tài)成員是與類關(guān)聯(lián)的,而不是與對(duì)象關(guān)聯(lián)的。
父類的構(gòu)造方法私有屬性:
如果父類的構(gòu)造方法是私有的,子類不能直接調(diào)用父類的構(gòu)造方法。這通常會(huì)限制子類對(duì)父類構(gòu)造方法的繼承。
在Java中,子類會(huì)繼承其父類的一些特性,但并非所有內(nèi)容都會(huì)被繼承。---> F,F
3.The superclass’s constructor must be explicitly invoked in the subclass’s constructor.
在Java中,當(dāng)你在子類中創(chuàng)建構(gòu)造函數(shù)時(shí),通常需要顯式調(diào)用超類的構(gòu)造函數(shù),使用super關(guān)鍵字來(lái)實(shí)現(xiàn)。如果在子類構(gòu)造函數(shù)中沒(méi)有顯式調(diào)用超類構(gòu)造函數(shù),Java將隱式插入對(duì)超類默認(rèn)(無(wú)參)構(gòu)造函數(shù)的調(diào)用。
下面是一個(gè)示例,說(shuō)明了這個(gè)概念:
class Superclass {
// Default constructor---無(wú)參構(gòu)造方法
public Superclass() {
System.out.println("Superclass default constructor");
}
// Parameterized constructor---含參構(gòu)造方法
public Superclass(int x) {
System.out.println("Superclass parameterized constructor with x = " + x);
}
}
class Subclass extends Superclass {
// Implicit call to the default constructor of the superclass
// if this constructor doesn't explicitly call a superclass constructor
public Subclass() {
//這里隱含super()
System.out.println("Subclass constructor");
}
// Explicit call to the parameterized constructor of the superclass
public Subclass(int y) {
super(y); // Call to the parameterized constructor of the superclass
System.out.println("Subclass constructor with y = " + y);
}
}
public class Main {
public static void main(String[] args) {
Subclass obj1 = new Subclass();
Subclass obj2 = new Subclass(10);
}
}
子類Subclass在無(wú)參構(gòu)造函數(shù)(Subclass())中隱式調(diào)用了超類Superclass的默認(rèn)構(gòu)造函數(shù)。在有參構(gòu)造函數(shù)(Subclass(int y))中,通過(guò)使用super(y)顯式調(diào)用了超類的帶參數(shù)構(gòu)造函數(shù)。
值得注意的是,如果超類沒(méi)有默認(rèn)構(gòu)造函數(shù),并且在子類構(gòu)造函數(shù)中沒(méi)有顯式調(diào)用超類構(gòu)造函數(shù),那么將會(huì)引發(fā)編譯錯(cuò)誤。因?yàn)?span style="color:#0d0016;">Java子類構(gòu)造函數(shù)的第一條語(yǔ)句
要么是使用super顯式調(diào)用超類構(gòu)造函數(shù),
要么是隱式調(diào)用超類的默認(rèn)構(gòu)造函數(shù)。
2.selection
Questions? refer to the BankAccount, SavingsAccount, and CheckingAccountclasses defined below:
(Constructor,inheritance)
1. Of the methods shown, how many different nonconstructor methods can be invoked by a SavingsAccount object? ---> 找SavingAccount調(diào)用的非構(gòu)造方法的個(gè)數(shù)
(A) 1? ?(B) 2??(C) 3? ?(D) 4? (E)5
因?yàn)槲覀冎耙呀?jīng)學(xué)過(guò)什么是構(gòu)造方法什么是繼承,并且知道繼承會(huì)繼承父類的方法,若有遺忘點(diǎn)擊????:http://t.csdnimg.cn/MZtBH
so 是4個(gè)--->D
調(diào)用父類構(gòu)造方法的語(yǔ)句super()必須位于子類構(gòu)造方法語(yǔ)句的句首。
2. Which is a correct?implementation of the constructor with parameters in the SavingsAccount class???
A:? 不可以直接給父類私有變量直接賦值,對(duì)于父類的私有變量需要通過(guò)父類提供public的構(gòu)造方法進(jìn)行變量修改。
B:有g(shù)etbalance只是返回balance的值,并不是把它的值給balance所以B不正確。
C:super();只是調(diào)用父類無(wú)參構(gòu)造方法,balance = 0;
但是并未將accountBlance賦值給balance,所以錯(cuò)誤
E: 父類不含兩個(gè)參數(shù)構(gòu)造方法,無(wú)法調(diào)用。
C:想要執(zhí)行SavingsAccount class的含參構(gòu)造方法,去修改參數(shù)的值,在子類可以 直接通過(guò)=賦值進(jìn)行修改,而對(duì)于父類的私有變量需要通過(guò)父類提供public的構(gòu)造方法進(jìn)行變量修改。
如果父類類變量是private,要訪問(wèn)/修改父類私有變量,需要父類提供public的構(gòu)造方法進(jìn)行變量修改 --->D
??總結(jié):
在Java中,final 關(guān)鍵字有不同的用途,它可以用于變量、方法以及類。
1.Final 修飾變量:
當(dāng) final 用于修飾一個(gè)變量時(shí),表示該變量是一個(gè)常量,其值不能被修改。這一次賦值后,就不能再次為該變量賦新值。
? ?final int x = 10;
2.Final 修飾方法:
當(dāng) final 用于修飾一個(gè)方法時(shí),表示該方法不能被子類重寫(xiě)(覆蓋)。
? ?public class Parent {
? ? ? ?public final void display() {
? ? ? ? ? ?System.out.println("This method cannot be overridden.");
? ? ? ?}
? ?}
3.Final 修飾類:
當(dāng) final 用于修飾一個(gè)類時(shí),表示該類不能被繼承,即不能有子類。
? ?final class FinalClass {
? ? ? ?// Class implementation
? ?}
使用 final 的好處包括:
安全性: 當(dāng)一個(gè)變量被聲明為 final 時(shí),它的值不能被改變,這樣可以防止在程序的其他部分意外地改變這個(gè)值。
性能優(yōu)化: Java 編譯器能夠進(jìn)行一些優(yōu)化,因?yàn)樗?final 變量的值在運(yùn)行時(shí)不會(huì)發(fā)生變化,這可以在某些情況下提高性能。
設(shè)計(jì)上: final 方法和類可以阻止子類修改其行為,這有助于確保一些設(shè)計(jì)上的意圖。
需要注意的是,final 并不是總是必需的,而是根據(jù)設(shè)計(jì)需要和代碼安全性來(lái)決定是否使用。在合適的情況下使用 final 可以提高代碼的清晰性和可維護(hù)性。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-752715.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752715.html
到了這里,關(guān)于【Java不看后悔系列】|面向?qū)ο缶幊蘾[繼承、封裝、多態(tài)全覆蓋]的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!