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