Java基礎(chǔ)知識(shí)總結(jié)之繼承
一、繼承的基本概念
什么是繼承呢?
我們可以想一下,既然是“繼承”,那么它必須是在兩個(gè)或多個(gè)類之間所發(fā)生的關(guān)系吧,這樣我們就可以說(shuō):這個(gè)類繼承自什么類,假如只有一個(gè)類的話,它既無(wú)法繼承別的類,而且也沒(méi)有別的類來(lái)繼承它,這就構(gòu)不成什么繼承關(guān)系了哈,理清楚了這一層關(guān)系之后我們?cè)賮?lái)談?wù)勊^承了什么呢? 既然說(shuō)什么什么類繼承自什么什么類,那它肯定要從繼承的那個(gè)類中繼承點(diǎn)什么呀!我們把發(fā)生繼承關(guān)系的這兩個(gè)類稱為父類和子類,子類可以繼承父類的屬性和方法,這個(gè)就是繼承的基本概念,下面我們來(lái)系統(tǒng)的學(xué)習(xí)一下吧 ~ ~
繼承是面向?qū)ο蟮娜筇卣髦???梢允沟米宇惥哂懈割惖膶傩院头椒ǎ€可以在子類中重新定義,追加屬性和方法
繼承的格式:
public class 子類名 extends父類名{}
public class Zi extends Fu{}
父類也被稱為基類、超類
子類也被稱為派生類
二、繼承的好處和弊端
繼承的好處
提高了代碼的復(fù)用性(多個(gè)類相同的成員可以放在同一個(gè)類中)
提高了代碼的維護(hù)性(如果方法的代碼需要改,修改父類中的方法即可)
繼承的壞處
類與類之間產(chǎn)生了關(guān)系,提高了耦合性,父類變化子類也不得不變化,削弱了子類的獨(dú)立性
什么時(shí)候使用繼承
繼承關(guān)系的體現(xiàn)(什么是什么的一種,大集合包含小集合,比如老虎可以繼承動(dòng)物類,因?yàn)槔匣儆趧?dòng)物)
三、繼承中變量訪問(wèn)的特點(diǎn)
在子類方法中訪問(wèn)一個(gè)變量
子類局部范圍找
子類成員范圍找
父類成員范圍找
沒(méi)有就會(huì)報(bào)錯(cuò)
四、super關(guān)鍵字
和this關(guān)鍵字用法相似
this:代表本類對(duì)象的引用
super:代表父類存儲(chǔ)空間的標(biāo)識(shí)(可以理解為父類對(duì)象的引用)
五、繼承中構(gòu)造方法的訪問(wèn)特點(diǎn)
子類中所有的構(gòu)造方法默認(rèn)都會(huì)訪問(wèn)父類中無(wú)參的構(gòu)造方法。
因?yàn)樽宇悤?huì)繼承父類中的數(shù)據(jù),可能還會(huì)使用父類的數(shù)據(jù)。所以子類初始化前,一定先完成父類數(shù)據(jù)的初始化(訪問(wèn)父類的構(gòu)造方法就是為了使得父類數(shù)據(jù)初始化)
每一個(gè)子類構(gòu)造方法的第一條語(yǔ)句默認(rèn)都是:super()
如果父類中沒(méi)有無(wú)參構(gòu)造方法,只有帶參構(gòu)造方法
通過(guò)使用super關(guān)鍵字去顯式的調(diào)用父類的帶參構(gòu)造方法
在父類中自己提供一個(gè)無(wú)參調(diào)用方法
六、繼承中成員方法的訪問(wèn)特點(diǎn)
通過(guò)子類對(duì)象訪問(wèn)一個(gè)方法
先在子類范圍找,然后在父類范圍找,如果都沒(méi)有就報(bào)錯(cuò)(不考慮父親的父親)
七、方法重寫
方法重寫概述:
子類中出現(xiàn)了和父類一模一樣的方法聲明
應(yīng)用:當(dāng)子類需要父類的功能,而功能主體子類有自己的特有內(nèi)容時(shí),可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內(nèi)容。
@Override
是一個(gè)注解(注解后面會(huì)學(xué)習(xí)到)
可以幫助我們檢查重寫方法的方法聲明的正確性
方法重寫的注意事項(xiàng):
父類中的私有方法,子類不能繼承,所以也不能重寫
如果沒(méi)有寫訪問(wèn)權(quán)限,默認(rèn)是default
子類訪問(wèn)父類時(shí),權(quán)限不能比父類的高
Java中不能同時(shí)繼承多個(gè)類,但是可以多層繼承,一層套一層
訪問(wèn)權(quán)限
1、private: Java語(yǔ)言中對(duì)訪問(wèn)權(quán)限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的屬性以及方法只能被該類的對(duì)象訪問(wèn),其子類不能訪問(wèn),更不能允許跨包訪問(wèn)。
2、default:即不加任何訪問(wèn)修飾符,通常稱為“默認(rèn)訪問(wèn)權(quán)限“或者“包訪問(wèn)權(quán)限”。該模式下,只允許在同一個(gè)包中進(jìn)行訪問(wèn)。
3、protected: 介于public 和 private 之間的一種訪問(wèn)修飾符,一般稱之為“保護(hù)訪問(wèn)權(quán)限”。被其修飾的屬性以及方法只能被類本身的方法及子類訪問(wèn),即使子類在不同的包中也可以訪問(wèn)。
4、public: Java語(yǔ)言中訪問(wèn)限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問(wèn),而且允許跨包訪問(wèn)。
權(quán)限 | 類內(nèi) | 同包 | 不同包子類 | 不同包非子類 |
private | √ | × | × | × |
default(不寫) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
八、包
包就是文件夾,不同的包下可以放同名的文件,對(duì)類進(jìn)行分類管理
src com 下
包的定義格式
格式:packpage包名;(多級(jí)包分開(kāi)用)
package com.it(二級(jí)包)
可以用cmd命令編譯并且執(zhí)行一個(gè)代碼,從中理解包和文件夾的關(guān)系,以及不同包下為什么可以出現(xiàn)相同的命名
導(dǎo)包
使用不同包下的類時(shí),使用的時(shí)候要寫類的全路徑,寫起來(lái)太麻煩
為了簡(jiǎn)化帶包操作,java提供了導(dǎo)包功能
import包名;
九、修飾符
權(quán)限修飾符
上表有
狀態(tài)修飾符
final(最終態(tài))
關(guān)鍵字是終的意思,可以修飾成員方法,成員變量,類
final關(guān)鍵字聲明類可以把類定義為不能繼承的,即最終類;
也可以用于修飾**方法,**該方法不能被子類重寫;
也可以用于修飾變量,表明該變量是常量,不能再次被賦值;
被聲明為final類的方法自動(dòng)的聲明為final,但是實(shí)例變量并不是final
final修飾局部變量
當(dāng)變量是基本類型:final修飾指的是基本類型的數(shù)據(jù)值不能發(fā)生改變
當(dāng)變量是引用類型:final修飾指的是引用類型的地址值不能發(fā)生改變,但是地址值的內(nèi)容可以發(fā)生改變.
例如:final int age=20;屬于數(shù)據(jù)值不能發(fā)生改變
final Student s=new Student();屬于地址值,內(nèi)容可以變,值不能變
十、static(靜態(tài))
可以修飾成員方法,成員變量
特點(diǎn):
static修飾的特點(diǎn):被類的所有對(duì)象共享
這也是我們判斷是否適用靜態(tài)變量關(guān)鍵字的條件
可以通過(guò)類名調(diào)用,也可以通過(guò)對(duì)象名調(diào)用(推薦適用類名調(diào)用)
直接寫類名然后定義這個(gè)靜態(tài)變量的值是多少
訪問(wèn)特點(diǎn):
靜態(tài)成員方法只能訪問(wèn)靜態(tài)成員;
非靜態(tài)成員方法可以訪問(wèn)所有;
到此這篇關(guān)于Java基礎(chǔ)知識(shí)總結(jié)之繼承的文章就介紹到這了,更多相關(guān)Java繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中的封裝、繼承和多態(tài),你真的都懂了嗎
- Java中的對(duì)象、類、抽象類、接口、繼承之間的聯(lián)系
- 解決java中的父類私有成員變量的繼承問(wèn)題
- 關(guān)于Java繼承中父類和子類構(gòu)造函數(shù)的問(wèn)題
- Java父類繼承中的static和final用法
- 淺談Java 繼承接口同名函數(shù)問(wèn)題
- Java必須學(xué)會(huì)的類的繼承與多態(tài)
- Java面向?qū)ο笾^承性的實(shí)例代碼詳解
- Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法實(shí)例分析
- C++中的多態(tài)與多重繼承實(shí)現(xiàn)與Java的區(qū)別
相關(guān)文章
簡(jiǎn)單聊一聊Java線程池ThreadPoolExecutor
在使用線程池之后,開(kāi)啟線程就變成了在線程池當(dāng)中找到一個(gè)空閑的線程,銷毀線程變成了歸還線程到線程池的過(guò)程,下面這篇文章主要給大家介紹了關(guān)于Java線程池ThreadPoolExecutor的相關(guān)資料,需要的朋友可以參考下2022-06-06idea啟動(dòng)springmvc項(xiàng)目時(shí)報(bào)找不到類的解決方法
這篇文章主要介紹了idea啟動(dòng)springmvc項(xiàng)目時(shí)報(bào)找不到類的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09利用Java實(shí)現(xiàn)在PDF中添加工具提示
這篇文章主要介紹了如何通過(guò)Java在PDF中添加工具提示,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的可以學(xué)習(xí)一下2022-01-01Java線程編程中Thread類的基礎(chǔ)學(xué)習(xí)教程
這篇文章主要介紹了Java線程編程中Thread類的基礎(chǔ)學(xué)習(xí)教程,Thread類包含諸多操作線程的方法,非常重要,需要的朋友可以參考下2015-12-12java解析XML Node與Element的區(qū)別(推薦)
下面小編就為大家分享一篇java解析XML Node與Element的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01