java集成_Java继承
一.繼承
1.簡介:
特點(diǎn):利于代碼復(fù)用;縮短開發(fā)周期。注:子類不能直接訪問父類的私有屬性
滿足“A is a B”的關(guān)系就可以形成繼承關(guān)系
例:
父類:
1 packagecom.swpu.animals;2
3 public classAnimal {4 //屬性
5 privateString name;6 private intmonth;7 privateString species;8 publicString getName() {9 returnname;10 }11 public voidsetName(String name) {12 this.name =name;13 }14 public intgetMonth() {15 returnmonth;16 }17 public void setMonth(intmonth) {18 this.month =month;19 }20 publicString getSpecies() {21 returnspecies;22 }23 public voidsetSpecies(String species) {24 this.species =species;25 }26
27 public voideat(){28 System.out.println("吃東西了");29 }30
31 }
View Code
子類:
1 packagecom.swpu.animals;2
3 public class Dog extendsAnimal {4 private intweight;5 public void setWeight(intweight){6 this.weight=weight;7 }8 public intgetWeight(){9 return this.weight;10 }11 public voidrun(){12 System.out.println("我是名叫"+this.getName()+"的"+this.getSpecies()+"在奔跑");13 }14
15 }
View Code
2.方法重寫:
語法規(guī)則:返回值類型,方法名,參數(shù)類型、順序、個(gè)數(shù)都要和父類繼承的方法相同。
注:方法重寫必須要在有繼承關(guān)系的子類中;
方法名相同,參數(shù)列表相同(參數(shù)順序,個(gè)數(shù),類型),方法返回值相同(可以允許是子類類型【向下兼容】);
方法的訪問修飾符是可以允許有變化的,但是訪問范圍要大于等于父類的訪問范圍;
方法的重寫與方法的參數(shù)名無關(guān);
在Java中僅限方法重寫,無屬性重寫,但是在子類中,可以定義與父類重名的屬性的。
子類重寫了父類的方法后,子類對(duì)象調(diào)用的是重寫后的方法。
二.訪問修飾符的分類與作用
private:只允許在本類中進(jìn)行訪問;
public:允許在任意位置訪問;
protected:允許在當(dāng)前類,同包子類/非子類,跨包子類訪問,跨包非子類不允許;
默認(rèn):允許在當(dāng)前類,同包子類/非子類;跨包子類/非子類不允許調(diào)用
三.super關(guān)鍵字:父類對(duì)象的引用
注:Python中super()是一個(gè)函數(shù),并不是直接調(diào)用父類,而是根據(jù)MRO算法的調(diào)用順序。
對(duì)比Python的繼承初始化順序(未調(diào)用super):父類的靜態(tài)成員——>子類靜態(tài)成員——>子類構(gòu)造(實(shí)例化不會(huì)調(diào)用父類構(gòu)造,調(diào)用super函數(shù)會(huì)遵照MRO【Pythoh3后是C3】算法的順序調(diào)用)【注:如果是多繼承則按照每個(gè)繼承從父類往低層的順序】
1.Java中的super:
訪問父類成員方法:super.print();
訪問父類屬性:super.name;
訪問父類構(gòu)造方法:super()
Java中利用super關(guān)鍵字調(diào)用父類的方法和屬性
父類的構(gòu)造方法不允許被繼承,不允許被重寫,但是會(huì)影響子類對(duì)象的實(shí)例化(子類構(gòu)造默認(rèn)調(diào)用的是父類的無參構(gòu)造)
2.繼承的初始化順序:
父類的靜態(tài)成員(多個(gè)父類,從最頂層父類按順序執(zhí)行【注訪問修飾符不影響成員的加載順序,跟書寫位置有關(guān)】)——>子類靜態(tài)成員——>父類對(duì)象構(gòu)造——>子類對(duì)象構(gòu)造
注:子類構(gòu)造默認(rèn)調(diào)用的是父類的無參構(gòu)造,可以通過super()調(diào)用父類允許被訪問的其他構(gòu)造方法【必須放在子類有效構(gòu)造方法的第一行】
注意:
三.super和this對(duì)比
注:構(gòu)造方法調(diào)用時(shí),super和this不能同時(shí)出現(xiàn)(都要在第一行)
四.方法重寫和方法重載的對(duì)比
五.Object類
1.Object中常用的方法:
1.1equals方法:
equals():直接繼承Object中的equals()方法時(shí),比較的是兩個(gè)引用是否指向的是同一個(gè)對(duì)象(相當(dāng)于Python中的is);
子類可以通過重寫equals方法的形式,改變比較的內(nèi)容;
如果是String中的equals(重寫了Object中的equals,判斷的是兩個(gè)值是否相等)
重寫equals:
1 packagecom.swpu.test;2 importcom.swpu.animals.Animal;3
4 public classTest3 {5 public static voidmain(String[] args){6 Animal one=new Animal("哈哈",20);7 Animal two=new Animal("哈哈",20);8 boolean flag=one.equals(two);9 //==判斷的是是否是同一空間
10 System.out.println("one 和 two的引用比較:"+flag);11 System.out.println("one 和two 的引用比較:"+(one==two));12 String str1=new String("hello");13 String str2=new String("hello");14 boolean flag2=str1.equals(str2);15 System.out.println("str1 和 str2的引用比較:"+flag2);16 System.out.println("str1 和str2 的引用比較:"+(str1==str2));17 /**
18 * 輸出:19 * one 和 two的引用比較:false20 one 和two 的值比較:false21 str1 和 str2的引用比較:true22 str1 和str2 的值比較:false23 */
24
25 }26
27
28 }
View Code
1.2toString方法:
輸出對(duì)象時(shí),默認(rèn)自動(dòng)調(diào)用toString方法,相當(dāng)于Python的__repr__或__str__魔法函數(shù);
繼承Object中的toString方法時(shí),輸出對(duì)象的字符串表現(xiàn)形式為:類型信息+@+地址信息(通過hash計(jì)算)【如:com.swpu.animals.Animal@15db9742】
重寫toString方法:
1 //重寫toString方法
2 publicString toString(){3 return "姓名:"+this.getName()+"月份:"+this.getMonth();4 }5
View Code
六.final關(guān)鍵字
final class:該類沒有子類(public final class;final public class);
final 方法:該方法不允許被子類重寫,但是可以被子類正常繼承使用;
final 方法內(nèi)局部變量:只要在具體被使用之前進(jìn)行賦值即可,一旦賦值,不能進(jìn)行修改;
final 類中成員屬性:賦值場景:1.定義直接初始化;2.構(gòu)造方法;3.構(gòu)造代碼塊;
構(gòu)造方法不允許用final修飾。
注:
基本數(shù)據(jù)類型的變量:初始賦值后不能被修改
引用數(shù)據(jù)類型:初始化之后不能在指向另一個(gè)對(duì)象,但對(duì)象的內(nèi)容是可以變的;
final可以和static配合使用(方法,變量):通過final修飾可以提高性能,但會(huì)減低擴(kuò)展性
七.注解介紹
總結(jié)
以上是生活随笔為你收集整理的java集成_Java继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库迁徙_mysql数据迁徙
- 下一篇: java猜数字小游戏_Java实现简单猜