版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο筮M(jìn)階
講師:徐磊面向?qū)ο笾R(shí)的學(xué)習(xí)建議多進(jìn)行思考和記憶、練習(xí)多關(guān)注語法點(diǎn)的基本作用要自信,不要在短期想能做什么?設(shè)計(jì)模式:?jiǎn)卫齭tatic關(guān)鍵字面向?qū)ο笕筇卣鳎豪^承系統(tǒng)中很多實(shí)體類的屬性和行為存在重復(fù)代碼,如何把這些類信息進(jìn)行優(yōu)化,降低代碼冗余,提升代碼復(fù)用呢?之前定義的成員變量:name,age屬于每個(gè)對(duì)象的。如何表示共享的信息?如在線人數(shù)等有些類只需要一個(gè)對(duì)象就可以了,如任務(wù)管理器對(duì)象,如何實(shí)現(xiàn)一個(gè)類只能對(duì)外產(chǎn)生一個(gè)對(duì)象?面向?qū)ο筮M(jìn)階課程:第一天同學(xué)們需要學(xué)習(xí)哪些語法?static靜態(tài)關(guān)鍵字static是什么,static修飾成員變量的用法static修飾成員變量的應(yīng)用:在線人數(shù)統(tǒng)計(jì)static修飾成員方法的用法static修飾成員方法的應(yīng)用:工具類static的注意事項(xiàng)static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承static是什么static是靜態(tài)的意思,可以用來修飾成員變量、成員方法。static修飾成員變量之后稱為靜態(tài)成員變量(類變量),修飾方法之后稱為靜態(tài)方法(類方法)。static修飾后的成員變量,可以被類的所有對(duì)象共享(訪問、修改)。publicclassUser{
staticStringname;
intage;
}publicclassUser{
/**靜態(tài)成員變量*/
staticStringname;
/**實(shí)例成員變量*/
intage;
}堆內(nèi)存棧內(nèi)存方法區(qū)User.classUserumain…Useru16acbcd0int
age0staticStringnameUser類靜態(tài)變量區(qū)publicclassTest{
publicstaticvoidmain(String[]args){
//目標(biāo):認(rèn)識(shí)static,掌握static修飾成員變量的特點(diǎn)和使用場(chǎng)景。
//1、訪問的區(qū)別
System.out.println(U);
//System.out.println(User.age);//報(bào)錯(cuò)
Useru=newUser();
System.out.println(u.age);
System.out.println();
//靜態(tài)成員變量可以用類,也可以用對(duì)象訪問
//實(shí)例成員變量只能用對(duì)象訪問。
//2、static修飾靜態(tài)成員變量的特點(diǎn)。
Useru1=newUser();
u1.age=23;
="黑馬程序員";
Useru2=newUser();
u2.age=35;
="傳值教育";
System.out.println(u1.age);//23
System.out.println();//傳值教育
}
}Test.clasmain方法Useru2
null
7acbcd0int
age0
23
”黑馬程序員"
8acbcd0int
age0
35
“傳值教育”
成員變量?jī)?nèi)存原理static是什么?靜態(tài)的意思,可以修飾成員變量、成員方法static修飾的成員變量是什么?有什么特點(diǎn)?靜態(tài)成員變量(有static修飾,屬于類、加載一次,內(nèi)存中只有一份),訪問格式實(shí)例成員變量(無static修飾,屬于對(duì)象),訪問格式:
兩種成員變量各自在什么情況下定義?靜態(tài)成員變量:表示在線人數(shù)等需要被類的所有對(duì)象共享的信息時(shí)。實(shí)例成員變量:屬于每個(gè)對(duì)象,且每個(gè)對(duì)象的該信息不同時(shí)(如:name,age,money…)對(duì)象.實(shí)例成員變量。類名.靜態(tài)成員變量(推薦)對(duì)象.靜態(tài)成員變量(不推薦)。static靜態(tài)關(guān)鍵字static是什么,static修飾成員變量的用法static修飾成員變量的應(yīng)用:在線人數(shù)統(tǒng)計(jì)static修飾成員方法的用法static修飾成員方法的應(yīng)用:工具類static的注意事項(xiàng)static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承static靜態(tài)關(guān)鍵字static的作用、修飾成員變量的用法static修飾成員變量的內(nèi)存原理static修飾成員方法的基本用法static修飾成員方法的內(nèi)存原理static的注意事項(xiàng)static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承之前我們定義的方法有的有static修飾,有的是沒有的,有什么不同?publicvoidrun(){
System.out.println(name+"正在好好學(xué)習(xí),天天向上~~");
}
publicstaticintgetMax(inta,intb){
returna>b?a:b;
}成員方法的分類:靜態(tài)成員方法(有static修飾,歸屬于類),建議用類名訪問,也可以用對(duì)象訪問。實(shí)例成員方法(無static修飾,歸屬于對(duì)象),只能用對(duì)象觸發(fā)訪問。表示對(duì)象自己的行為的,且方法中需要訪問實(shí)例成員的,則該方法必須申明成實(shí)例方法。如果該方法是以執(zhí)行一個(gè)共用功能為目的,則可以申明成靜態(tài)方法。使用場(chǎng)景成員方法的分類和訪問分別是什么樣的?
靜態(tài)成員方法(有static修飾,屬于類和對(duì)象共享)訪問格式:類名.靜態(tài)成員方法。對(duì)象.靜態(tài)成員方法。(不推薦)實(shí)例成員方法(無static修飾,屬于對(duì)象)的訪問格式:對(duì)象.實(shí)例成員方法。每種成員方法的使用場(chǎng)景是怎么樣的?
表示對(duì)象自己的行為的,且方法中需要直接訪問實(shí)例成員,則該方法必須申明成實(shí)例方法。如果該方法是以執(zhí)行一個(gè)通用功能為目的,或者需要方便訪問,則可以申明成靜態(tài)方法定義員工類的實(shí)例8分鐘需求:請(qǐng)完成一個(gè)標(biāo)準(zhǔn)實(shí)體類的設(shè)計(jì),并提供如下要求實(shí)現(xiàn)。①:某公司的員工信息系統(tǒng)中,需要定義一個(gè)公司的員工類Employee,包含如下信息(name,age,所在部門名稱dept),定義一個(gè)靜態(tài)的成員變量company記錄公司的名稱。②:需要在Employee類中定義一個(gè)方法showInfos(),用于輸出當(dāng)前員工對(duì)象的信息。如name,age,dept以及公司名稱company的信息。③:需要在Employee類中定義定義一個(gè)通用的靜態(tài)方法compareByAge,用于傳輸兩個(gè)員工對(duì)象的年齡進(jìn)入,并返回比較較大的年齡,例如:2個(gè)人中的最大年齡是:45歲。static靜態(tài)關(guān)鍵字static的作用、修飾成員變量的用法static修飾成員變量的內(nèi)存原理static修飾成員方法的基本用法static修飾成員方法的內(nèi)存原理static的注意事項(xiàng)static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承publicclassStudent{
privateStringname;
//1.實(shí)例方法:無static修飾的,屬于對(duì)象的
publicvoidstudy(){
System.out.println(name+“在好好學(xué)習(xí)~~~”);
}
//2.靜態(tài)方法:有static修飾,屬于類和對(duì)象共享的
publicstaticintgetMax(inta,intb){
returna>b?a:b;
}
publicstaticvoidmain(String[]args){
//1.類名.靜態(tài)成員方法
System.out.println(Student.getMax(10,2));
//注意:同一個(gè)類中訪問靜態(tài)成員類名可以不寫
System.out.println(getMax(2,10));
//2.對(duì)象.實(shí)例成員方法
//study();//會(huì)報(bào)錯(cuò)
Students
=newStudent();
="豬八戒";
s.study();
//3.對(duì)象.靜態(tài)成員方法。(不推薦)
System.out.println(s.getMax(20,10));
}
}堆內(nèi)存棧內(nèi)存方法區(qū)Student.classStudentsmain…6acbcfc06acbcfc0Stringname豬八戒方法的引用main方法(static)getMax方法(static)study實(shí)例方法static靜態(tài)關(guān)鍵字static的作用、修飾成員變量的用法static修飾成員變量的內(nèi)存原理static修飾成員方法的基本用法static修飾成員方法的內(nèi)存原理static的注意事項(xiàng)[拓展]static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承static訪問注意事項(xiàng):靜態(tài)方法只能訪問靜態(tài)的成員,不可以直接訪問實(shí)例成員。實(shí)例方法可以訪問靜態(tài)的成員,也可以訪問實(shí)例成員。靜態(tài)方法中是不可以出現(xiàn)this關(guān)鍵字的。
static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承工具類是什么?類中都是一些靜態(tài)方法,每個(gè)方法都是以完成一個(gè)共用的功能為目的,這個(gè)類用來給系統(tǒng)開發(fā)人員共同使用的。案例導(dǎo)學(xué):在企業(yè)的管理系統(tǒng)中,通常需要在一個(gè)系統(tǒng)的很多業(yè)務(wù)處使用驗(yàn)證碼進(jìn)行防刷新等安全控制。問題:同一個(gè)功能多處開發(fā),會(huì)出現(xiàn)代碼重復(fù)度過高。使用工具類的好處一是調(diào)用方便,二是提高了代碼復(fù)用(一次編寫,處處可用)為什么工具類中的方法不用實(shí)例方法做?實(shí)例方法需要?jiǎng)?chuàng)建對(duì)象調(diào)用。此時(shí)用對(duì)象只是為了調(diào)用方法,這樣只會(huì)浪費(fèi)內(nèi)存。工具類定義時(shí)的其他要求:由于工具里面都是靜態(tài)方法,直接用類名即可訪問,因此,工具類無需創(chuàng)建對(duì)象,建議將工具類的構(gòu)造器進(jìn)行私有。工具類是什么,有什么好處??jī)?nèi)部都是一些靜態(tài)方法,每個(gè)方法完成一個(gè)功能一次編寫,處處可用,提高代碼的重用性。工具類有什么要求?建議工具類的構(gòu)造器私有化處理。工具類不需要?jiǎng)?chuàng)建對(duì)象。定義數(shù)組工具類10分鐘需求:在實(shí)際開發(fā)中,經(jīng)常會(huì)遇到一些數(shù)組使用的工具類。請(qǐng)按照如下要求編寫一個(gè)數(shù)組的工具類:ArraysUtils:我們知道數(shù)組對(duì)象直接輸出的時(shí)候是輸出對(duì)象的地址的,而項(xiàng)目中很多地方都需要返回?cái)?shù)組的內(nèi)容,請(qǐng)?jiān)贏rraysUtils中提供一個(gè)工具類方法toString,用于返回整數(shù)數(shù)組的內(nèi)容,返回的字符串格式如:[10,20,50,34,100](只考慮整數(shù)數(shù)組,且只考慮一維數(shù)組):經(jīng)常需要統(tǒng)計(jì)平均值,平均值為去掉最低分和最高分后的分值,請(qǐng)?zhí)峁┻@樣一個(gè)工具方法getAerage,用于返回平均分。(只考慮浮點(diǎn)型數(shù)組,且只考慮一維數(shù)組):定義一個(gè)測(cè)試類TestDemo,調(diào)用該工具類的工具方法,并返回結(jié)果。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊代碼塊的分類、作用靜態(tài)代碼塊的應(yīng)用案例static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承代碼塊概述代碼塊是類的5大成分之一(成員變量、構(gòu)造器,方法,代碼塊,內(nèi)部類),定義在類中方法外。在Java類下,使用
{
}
括起來的代碼被稱為代碼塊
。代碼塊分為靜態(tài)代碼塊:格式:static{}特點(diǎn):需要通過static關(guān)鍵字修飾,隨著類的加載而加載,并且自動(dòng)觸發(fā)、只執(zhí)行一次使用場(chǎng)景:在類加載的時(shí)候做一些靜態(tài)數(shù)據(jù)初始化的操作,以便后續(xù)使用。構(gòu)造代碼塊(了解,見的少):格式:{}特點(diǎn):每次創(chuàng)建對(duì)象,調(diào)用構(gòu)造器執(zhí)行時(shí),都會(huì)執(zhí)行該代碼塊中的代碼,并且在構(gòu)造器執(zhí)行前執(zhí)行使用場(chǎng)景:初始化實(shí)例資源。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊代碼塊的分類、作用靜態(tài)代碼塊的應(yīng)用案例static應(yīng)用知識(shí):?jiǎn)卫嫦驅(qū)ο笕筇卣髦豪^承斗地主游戲需求:
在啟動(dòng)游戲房間的時(shí)候,應(yīng)該提前準(zhǔn)備好54張牌,后續(xù)才可以直接使用這些牌數(shù)據(jù)。分析:該房間只需要一副牌。定義一個(gè)靜態(tài)的ArrayList集合存儲(chǔ)54張牌對(duì)象,靜態(tài)的集合只會(huì)加載一份。在啟動(dòng)游戲房間前,應(yīng)該將54張牌初始化好當(dāng)系統(tǒng)啟動(dòng)的同時(shí)需要準(zhǔn)備好54張牌數(shù)據(jù),此時(shí)可以用靜態(tài)代碼塊完成。靜態(tài)代碼塊的作用是什么?如果要在啟動(dòng)系統(tǒng)時(shí)對(duì)靜態(tài)資源進(jìn)行初始化,則建議使用靜態(tài)代碼塊完成數(shù)據(jù)的初始化操作。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式設(shè)計(jì)模式、單例模式介紹、餓漢單例模式懶漢單例模式面向?qū)ο笕筇卣髦豪^承什么是設(shè)計(jì)模式(Designpattern)開發(fā)中經(jīng)常遇到一些問題,一個(gè)問題通常有n種解法的,但其中肯定有一種解法是最優(yōu)的,這個(gè)最優(yōu)的解法被人總結(jié)出來了,稱之為設(shè)計(jì)模式。設(shè)計(jì)模式有20多種,對(duì)應(yīng)20多種軟件開發(fā)中會(huì)遇到的問題。學(xué)設(shè)計(jì)模式主要是學(xué)2點(diǎn):第一:這種模式用來解決什么問題。第二:遇到這種問題了,該模式是怎么寫的,他是如何解決這個(gè)問題的。單例的實(shí)現(xiàn)方式很多餓漢單例模式。懶漢單例模式。……單例模式可以保證系統(tǒng)中,應(yīng)用該模式的這個(gè)類永遠(yuǎn)只有一個(gè)實(shí)例,即一個(gè)類永遠(yuǎn)只能創(chuàng)建一個(gè)對(duì)象。例如任務(wù)管理器對(duì)象我們只需要一個(gè)就可以解決問題了,這樣可以節(jié)省內(nèi)存空間。餓漢單例設(shè)計(jì)模式在用類獲取對(duì)象的時(shí)候,對(duì)象已經(jīng)提前為你創(chuàng)建好了。設(shè)計(jì)步驟:定義一個(gè)類,把構(gòu)造器私有。定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象。/**a、定義一個(gè)單例類*/
publicclassSingleInstance{
/**c.定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象即可:屬于類,與類一起加載一次*/
publicstaticSingleInstanceinstance=newSingleInstance();
/**b.單例必須私有構(gòu)造器*/
privateSingleInstance(){
System.out.println("創(chuàng)建了一個(gè)對(duì)象");
}
}餓漢單例的實(shí)現(xiàn)步驟?定義一個(gè)類,把構(gòu)造器私有。定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式設(shè)計(jì)模式、單例模式介紹、餓漢單例模式懶漢單例模式面向?qū)ο笕筇卣髦豪^承懶漢單例設(shè)計(jì)模式在真正需要該對(duì)象的時(shí)候,才去創(chuàng)建一個(gè)對(duì)象(延遲加載對(duì)象)。設(shè)計(jì)步驟:定義一個(gè)類,把構(gòu)造器私有。定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象。提供一個(gè)返回單例對(duì)象的方法/**定義一個(gè)單例類*/
classSingleInstance{
/**定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象即可:屬于類,與類一起加載一次*/
publicstaticSingleInstanceinstance;//null
/**
單例必須私有構(gòu)造器*/
privateSingleInstance(){}
/**必須提供一個(gè)方法返回一個(gè)單例對(duì)象*/
publicstaticSingleInstancegetInstance(){
...
return...;
}
}懶漢單例的實(shí)現(xiàn)步驟?定義一個(gè)類,把構(gòu)造器私有。定義一個(gè)靜態(tài)變量存儲(chǔ)一個(gè)對(duì)象。提供一個(gè)返回單例對(duì)象的方法static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的特點(diǎn)繼承后:子類構(gòu)造器訪問父類有參構(gòu)造器this、super使用總結(jié)什么是繼承?Java中提供一個(gè)關(guān)鍵字extends,用這個(gè)關(guān)鍵字,我們可以讓一個(gè)類和另一個(gè)類建立起父子關(guān)系。Student稱為子類(派生類),People稱為父類(基類或超類)。作用:當(dāng)子類繼承父類后,就可以直接使用父類公共的屬性和方法了可以提高代碼的復(fù)用性。為什么用繼承?使用繼承的好處publicclassStudent
extendsPeople
{}publicclassStudent{
privateStringname;
privateintage;
publicvoidstudy(){
System.out.println("努力學(xué)習(xí)");
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}publicclassTeacher{
privateStringname;
privateintage;
publicvoidteach(){
System.out.println("教書育人");
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}相同的屬性相同的方法相同特征案例練習(xí):請(qǐng)閱讀以下代碼存在的問題,并使用繼承這個(gè)技術(shù)進(jìn)行優(yōu)化publicclassStudent{
privateStringname;
privateintage;
publicvoidstudy(){
System.out.println("努力學(xué)習(xí)");
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}publicclassTeacher{
privateStringname;
privateintage;
publicvoidteach(){
System.out.println("教書育人");
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}相同的屬性相同的方法相同特征解決方案:把相同的屬性和行為抽離出來,可以降低重復(fù)代碼的書寫,抽取出來放到何處呢?publicclassPeople{
privateStringname;
privateintage;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}publicclassStudent{
publicvoidstudy(){
System.out.println("努力學(xué)習(xí)");
}
}publicclassTeacher{
publicvoidteach(){
System.out.println("教書育人");
}
}publicclassStudentextendsPeople{
publicvoidstudy(){
System.out.println("努力學(xué)習(xí)");
}}publicclassTeacher
extendsPeople{
publicvoidteach(){
System.out.println("教書育人");
}
}爸爸?。?!爸爸?。?!你倆什么身份啊我的東西你倆說用就用解決:繼承(extends)關(guān)系,好處:提高代碼復(fù)用什么是繼承?繼承的好處是啥?繼承就是java允許我們用extends關(guān)鍵字,讓一個(gè)類和另一個(gè)類建立起一種父子關(guān)系。提高代碼復(fù)用性,減少代碼冗余,增強(qiáng)類的功能擴(kuò)展性。繼承的格式子類extends父類繼承后子類的特點(diǎn)?子類繼承父類,子類可以得到父類的屬性和行為,子類可以使用。Java中子類更強(qiáng)大static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的特點(diǎn)繼承后:子類構(gòu)造器訪問父類有參構(gòu)造器this、super使用總結(jié)繼承設(shè)計(jì)規(guī)范:子類們相同特征(共性屬性,共性方法)放在父類中定義,子類獨(dú)有的的屬性和行為應(yīng)該定義在子類自己里面。為什么?
如果子類的獨(dú)有屬性、行為定義在父類中,會(huì)導(dǎo)致其它子類也會(huì)得到這些屬性和行為,這不符合面向?qū)ο筮壿?。繼承的設(shè)計(jì)規(guī)范需求:
在傳智教育的tlias教學(xué)資源管理系統(tǒng)中,存在學(xué)生、老師角色會(huì)進(jìn)入系統(tǒng)。分析:學(xué)生信息和行為(名稱,年齡,所在班級(jí),查看課表,填寫聽課反饋)老師信息和行為(名稱,年齡,部門名稱,查看課表,發(fā)布問題)定義角色類作為父類包含屬性(名稱,年齡),行為(查看課表)定義子類:學(xué)生類包含屬性(所在班級(jí)),行為(填寫聽課反饋)定義子類:老師類包含屬性(部門名稱),行為(發(fā)布問題)publicclassPeople{
privateStringname;
privateintage;
/**
共同行為
*/
publicvoidqueryCourse(){
System.out.println(name+",您可以開始查看您的課表信息了~~~");
}
//getter+setter
}publicclassStudentextendsPeople{
privateStringclassName;
/**
獨(dú)有行為
*/
publicvoidwriteInfo(){
System.out.println(getName()+"今天自己棒棒的,老師也是666~~~");
}
//getter+setter}publicclassTest{
publicstaticvoidmain(String[]args){
Students=newStudent();
s.setName("翠花");//父類的
s.setAge(22);//父類的
s.setClassName("Java就業(yè)999期");//子類的
System.out.println(s.getName());
System.out.println(s.getAge());
System.out.println(s.getClassName());
s.queryCourse();//父類的
s.writeInfo();//子類的
}
}堆內(nèi)存父類空間(super)子類空間(this)eeff7730aStringnameint
ageStringclassNamegetter+setterqueryCourse方法引用getter+setterwriteInfo方法引用nullnull0翠花Java就業(yè)999期22繼承需要滿足什么樣的設(shè)計(jì)規(guī)范?子類們相同特征(共性屬性,共性方法)放在父類中定義。子類獨(dú)有的的屬性和行為應(yīng)該定義在子類自己里面。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的特點(diǎn)繼承后:子類構(gòu)造器訪問父類有參構(gòu)造器this、super使用總結(jié)繼承的特點(diǎn)子類可以繼承父類的屬性和行為,但是子類不能繼承父類的構(gòu)造器。Java是單繼承模式:一個(gè)類只能繼承一個(gè)直接父類。Java不支持多繼承、但是支持多層繼承。Java中所有的類都是Object類的子類。1、子類是否可以繼承父類的構(gòu)造器?不可以的,子類有自己的構(gòu)造器,父類構(gòu)造器用于初始化父類對(duì)象。2、子類是否可以繼承父類的私有成員?可以的,只是不能直接訪問。子類對(duì)象002super父類成員空間this子類成員空間
引用方法清單:run();(private)1、子類是否可以繼承父類的靜態(tài)成員?有爭(zhēng)議的知識(shí)點(diǎn)。子類可以直接使用父類的靜態(tài)成員(共享)但個(gè)人認(rèn)為:子類不能繼承父類的靜態(tài)成員。(共享并非繼承)Java只支持單繼承,不支持多繼承。
單繼承:子類只能繼承一個(gè)直接父類不支持多繼承:子類不能同時(shí)繼承多個(gè)父類為何不支持多繼承,請(qǐng)看如下反證法:publicclass父類A{
publicvoidmethod(){
System.out.println("復(fù)習(xí)數(shù)學(xué)");
}
}publicclass父類B{
publicvoidmethod(){
System.out.println("復(fù)習(xí)語文");
}
}class子類extends父類A
,
父類B{
}publicclass子類Cextends父類A,父類B{
publicstaticvoidmain(String[]args){
子類z=new子類();
z.method();
//復(fù)習(xí)啥?出現(xiàn)二義性,聽哪個(gè)爸爸的呢?java懵了!因此不支持多繼承
}}Java支持多層繼承
子類A繼承父類B,父類B可以繼承父類CABCObject特點(diǎn):Java中所有類,要么直接繼承了Object,要么默認(rèn)繼承了Object,要么間接繼承了Object,Object是祖宗類。Object類Object類Object類繼承有哪些特點(diǎn)?子類可以繼承父類的屬性和行為,但是子類不能繼承父類的構(gòu)造器。Java是單繼承模式:一個(gè)類只能繼承一個(gè)直接父類。Java不支持多繼承、但是支持多層繼承。Java中所有的類都是Object類的子類。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的特點(diǎn)繼承后:子類構(gòu)造器訪問父類有參構(gòu)造器this、super使用總結(jié)在子類方法中訪問成員(成員變量、成員方法)滿足:就近原則先子類局部范圍找然后子類成員范圍找然后父類成員范圍找,如果父類范圍還沒有找到則報(bào)錯(cuò)。如果子父類中,出現(xiàn)了重名的成員,會(huì)優(yōu)先使用子類的,此時(shí)如果一定要在子類中使用父類的怎么辦?可以通過super關(guān)鍵字,指定訪問父類的成員。格式:super.父類成員變量/父類成員方法在子類方法中訪問成員(成員變量、成員方法)滿足:就近原則,子類沒有找子類、子類沒有找父類、父類沒有就報(bào)錯(cuò)!如果子父類中出現(xiàn)了重名的成員,此時(shí)如果一定要在子類中使用父類的怎么辦?格式:super.父類成員變量/父類成員方法static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的特點(diǎn)繼承后:子類構(gòu)造器訪問父類有參構(gòu)造器this、super使用總結(jié)什么是方法重寫?在繼承體系中,子類出現(xiàn)了和父類中一模一樣的方法聲明,我們就稱子類這個(gè)方法是重寫的方法。方法重寫的應(yīng)用場(chǎng)景當(dāng)子類需要父類的功能,但父類的該功能不完全滿足自己的需求時(shí)。子類可以重寫父類中的方法。案例演示:舊手機(jī)的功能只能是基本的打電話,發(fā)信息新手機(jī)的功能需要能夠:基本的打電話下支持視頻通話?;镜陌l(fā)信息下支持發(fā)送語音和圖片。方法重寫注意事項(xiàng)和要求重寫方法的名稱、形參列表必須與被重寫方法的名稱和參數(shù)列表一致。私有方法不能被重寫。子類重寫父類方法時(shí),訪問權(quán)限必須大于或者等于父類(暫時(shí)了解:缺省<protected<public)子類不能重寫父類的靜態(tài)方法,如果重寫會(huì)報(bào)錯(cuò)的。@Override重寫注解@Override是放在重寫后的方法上,作為重寫是否正確的校驗(yàn)注解。加上該注解后如果重寫錯(cuò)誤,編譯階段會(huì)出現(xiàn)錯(cuò)誤提示。建議重寫方法都加@Override注解,代碼安全,優(yōu)雅!方法重寫是什么樣的?子類寫一個(gè)與父類申明一樣的方法覆蓋父類的方法。方法重寫建議加上哪個(gè)注解,有什么好處?@Override注解可以校驗(yàn)重寫是否正確,同時(shí)可讀性好。重寫方法有哪些基本要求?重寫方法的名稱和形參列表應(yīng)該與被重寫方法一致。私有方法不能被重寫。子類重寫父類方法時(shí),訪問權(quán)限必須大于或者等于父類被重寫的方法的權(quán)限。static靜態(tài)關(guān)鍵字static應(yīng)用知識(shí):工具類static應(yīng)用知識(shí):代碼塊static應(yīng)用知識(shí):?jiǎn)卫O(shè)計(jì)模式面向?qū)ο笕筇卣髦豪^承繼承概述、使用繼承的好處繼承的設(shè)計(jì)規(guī)范、內(nèi)存運(yùn)行原理繼承的特點(diǎn)繼承后:成員變量、成員方法的訪問特點(diǎn)繼承后:方法重寫繼承后:子類構(gòu)造器的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026陜西長(zhǎng)嶺紡織機(jī)電科技有限公司招聘(13人)筆試備考題庫及答案解析
- 2026年征兵工作心理考試題庫及答案1套
- 2026福建廈門市工人文化宮合同制職工招聘1人筆試參考題庫及答案解析
- 2026年浙江省衢州市單招職業(yè)傾向性考試題庫及答案1套
- 2026年湖北職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試模擬測(cè)試卷及答案1套
- 2026河南鄭州大學(xué)物理學(xué)院人工微結(jié)構(gòu)課題組招聘科研助理1人筆試備考試題及答案解析
- 2026年桂林師范高等??茖W(xué)校單招職業(yè)適應(yīng)性考試題庫附答案
- 2026年河南物流職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫附答案
- 2026福建泉州德化閩投抽水蓄能有限公司招聘筆試參考題庫及答案解析
- 2025廣西南寧市良慶區(qū)總工會(huì)招聘工作人員1人筆試備考題庫及答案解析
- 江蘇省南通市2025屆高三三模 地理試題(含答案)
- 普外科科室護(hù)理年終總結(jié)
- 溫室氣體 產(chǎn)品碳足跡量化方法與要求 房間空調(diào)器 編制說明
- 山東省菏澤市菏澤經(jīng)開區(qū)2024-2025學(xué)年八年級(jí)(上)期末物理試卷(含解析)
- 改非申請(qǐng)書范文
- 2025年度光伏發(fā)電站智能監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)施合同
- 《老年康復(fù)照護(hù)》高職全套教學(xué)課件
- office辦公軟件應(yīng)用教學(xué)教案150
- 高級(jí)會(huì)計(jì)師評(píng)審專業(yè)技術(shù)工作業(yè)績(jī)報(bào)告
- 土地承包合同(2篇)
- 零首付買房合同范本
評(píng)論
0/150
提交評(píng)論