新聞中心
這篇文章主要介紹了java的三大特性怎么使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇java的三大特性怎么使用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
創(chuàng)新互聯(lián)公司專注于做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
java的三大特性是:1、封裝,就是將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問(wèn),而是通過(guò)該類提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)。2、繼承,就是子類擁有父類的所有屬性和方法,從而實(shí)現(xiàn)了實(shí)現(xiàn)代碼的復(fù)用。3、多態(tài),就是父類引用指向子類對(duì)象,從而產(chǎn)生多種形態(tài)。
Java的三大特性
面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。
封裝:
將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問(wèn),而是通過(guò)該類提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)。
繼承:
子類擁有父類的所有屬性和方法(除了private修飾的屬性不能擁有),從而實(shí)現(xiàn)了實(shí)現(xiàn)代碼的復(fù)用;
多態(tài):
使用父類引用接受,不同的子類的對(duì)象實(shí)例,父類引用調(diào)用相同的方法,根據(jù)子類不同的實(shí)例,產(chǎn)生不同的結(jié)果
1、封裝
1)什么是封裝
概念:盡可能隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),控制對(duì)象的修改及訪問(wèn)的權(quán)限。
訪問(wèn)修飾符:private (可將屬性修飾為私有,僅本類可見(jiàn))
2)公共訪問(wèn)方法
以訪問(wèn)方法的形式,進(jìn)而完成賦值與取值操作。
問(wèn)題:依舊沒(méi)有解決到非法數(shù)據(jù)錄入!
提供公共訪問(wèn)方法,以保證數(shù)據(jù)的正常錄入。
命名規(guī)范:
賦值:setXXX() //使用方法參數(shù)實(shí)現(xiàn)賦值
取值:getXXX() //使用方法返回值實(shí)現(xiàn)取值
3)示例
public static void main(String[] args) {
int a;
Num num = new Num();
// 傳入值100
num.setNum(100);
System.out.println(num.getNum());
}private int a;
// 在調(diào)用get方法時(shí),返回本類a的值
public int getNum() {
return a;
}
// 接受傳入的值100,并賦值給本類的a
public void setNum(int num) {
this.a = num;
}
4)過(guò)濾有效數(shù)據(jù)
在公共的訪問(wèn)方法內(nèi)部,添加邏輯判斷,進(jìn)而過(guò)濾掉非法數(shù)據(jù),以保證數(shù)據(jù)安全。
5)總結(jié)
get/set方法是外界訪問(wèn)對(duì)象私有屬性的唯一通道,方法內(nèi)部可對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和過(guò)濾。
2、繼承
1)程序中的繼承
程序中的繼承,是類與類之間特征和行為的一種贈(zèng)與或獲得。
兩個(gè)類之間的繼承關(guān)系,必須滿足“is a”的關(guān)系。
2)父類的選擇
現(xiàn)實(shí)生活中,很多類別之間都存在著繼承關(guān)系,都滿足“is a”的關(guān)系。
狗是一種動(dòng)物、狗是一種生物、狗是一種物質(zhì)。
多個(gè)類別都可作為“狗”的父類,需要從中選擇出最適合的父類。
功能越精細(xì),重合點(diǎn)越多,越接近直接父類。
功能越粗略,重合點(diǎn)越少,越接近Object類。(萬(wàn)物皆對(duì)象的概念)
3)繼承
語(yǔ)法:class 子類 extends 父類{ } //定義子類時(shí),顯示繼承父類
public class 子類名 extends 父類名{
//代碼塊
}
應(yīng)用:產(chǎn)生繼承關(guān)系之后,子類可以使用父類中的屬性和方法,也可定義子類獨(dú)有的屬性和方法。
好處:既提高代碼的復(fù)用性,又提高代碼的可擴(kuò)展性。
4)繼承的特點(diǎn)
Java為單繼承,一個(gè)類只能有一個(gè)直接父類,但可以多級(jí)繼承,屬性和方法逐級(jí)疊加。
5)不可繼承
構(gòu)造方法:類中的構(gòu)造方法,只負(fù)責(zé)創(chuàng)建本類對(duì)象,不可繼承。
private修飾的屬性和方法:訪問(wèn)修飾符的一種,僅本類可見(jiàn)。
父子類不在同一個(gè)package中時(shí),default修飾的屬性和方法:訪問(wèn)修飾符的一種,僅同包可見(jiàn)。
3、方法重寫
1)方法的重寫/覆蓋
方法重寫原則:
方法名稱、參數(shù)列表與父類相同。
返回值類型必須與父類相同或其子類
訪問(wèn)修飾符可與父類相同或是比父類更寬泛。
方法重寫的執(zhí)行:
子類重寫父類方法后,調(diào)用時(shí)優(yōu)先執(zhí)行子類重寫后的方法。
方法重寫的特性:
子類重寫父類方法時(shí)子類方法會(huì)覆蓋父類方法。
子類重寫父類方法,訪問(wèn)級(jí)別不能嚴(yán)于父類方法。
子類重寫方法名和類型與父類一樣。
父類的構(gòu)造方法無(wú)法重寫,只能被覆蓋。
示例:
//父類
public class Animal {
// 父類中吃的方法會(huì)輸出“玩玩玩”
public void play() {
System.out.println("玩玩玩");
}
// 父類中睡的方法會(huì)輸出“睡睡睡”
public void sleep() {
System.out.println("睡睡睡");
}
}/**
* 狗類繼承 父類
*/
public class Dog extends Animal {
// 進(jìn)行方法重寫,將方法重寫輸出為“狗玩飛碟”
public void play() {
System.out.println("狗玩飛碟");
}
}public class Test {
public static void main(String[] args) {
// 實(shí)例化寵物對(duì)象
Dog d = new Dog();
d.play();
d.sleep();
}
}
運(yùn)行輸出:

2)方法重寫與方法重載的區(qū)別
相同點(diǎn):方法名相同
不同點(diǎn):
重載:參數(shù)列表不同,返回值與訪問(wèn)修飾符無(wú)關(guān)
重寫:參數(shù)列表相同,返回值相同或其子類,訪問(wèn)修飾符不能比父類更嚴(yán)
4、super關(guān)鍵字
1)super關(guān)鍵字
super關(guān)鍵字可在子類中訪問(wèn)父類的方法。
使用”super.”的形式訪問(wèn)父類的方法,進(jìn)而完成在子類中的復(fù)用;
再疊加額外的功能代碼,組成新的功能。
2)super調(diào)用父類無(wú)參構(gòu)造
super():表示調(diào)用父類無(wú)參構(gòu)造方法。如果沒(méi)有顯示書寫,隱式存在于子類構(gòu)造方法的首行。
3)super調(diào)用父類有參構(gòu)造
super():表示調(diào)用父類無(wú)參構(gòu)造方法。
super(實(shí)參):表示調(diào)用父類有參構(gòu)造方法。
參構(gòu)造被執(zhí)行
4)this與super
this或super使用在構(gòu)造方法中時(shí),都要求在首行。
當(dāng)子類構(gòu)造中使用了this()或this(實(shí)參),即不可再同時(shí)書寫super()或super(實(shí)參),會(huì)由this()指向構(gòu)造方法完成super()調(diào)用。
class A{
public A(){
System.out.println(( "A-無(wú)參構(gòu)造"));
}
public A(int value) {
System.out.println(("A-有參構(gòu)造"));
}
}
class B extends A{
public B(){
super();
System.out.println( "B-無(wú)參構(gòu)造");
}
public B(int value) {
// super();這兩貨不能跟同時(shí)存在
this();
System.out.println(("B-有參構(gòu)造"));
}
}
5、多態(tài)
概念:父類引用指向子類對(duì)象,從而產(chǎn)生多種形態(tài)。
二者具有直接或間接的繼承關(guān)系時(shí),父類引用可指向子類對(duì)象,即形成多態(tài)。
父類引用僅可調(diào)用父類所聲明的屬性和方法,不可調(diào)用子類獨(dú)有的屬性和方法。
1)多態(tài)的應(yīng)用
方法重載可以解決接收不同對(duì)象參數(shù)的問(wèn)題,但其缺點(diǎn)也比較明顯。
首先,隨著子類的增加,Master類需要繼續(xù)提供大量的方法重載,多次修改并重新編譯源文件。
其次,每一個(gè)feed方法與某一種具體類型形成了密不可分的關(guān)系,耦合太高。
場(chǎng)景一:使用父類作為方法形參實(shí)現(xiàn)多態(tài),使方法參數(shù)的類型更為寬泛。
public class Animal {
// 父類中吃的方法會(huì)輸出“玩玩玩”
public void play() {
System.out.println("玩玩玩");
}
// 父類中睡的方法會(huì)輸出“睡睡睡”
public void sleep() {
System.out.println("睡睡睡");
}
}/**
* 狗類繼承 父類
*
*
*
*/
public class Dog extends Animal {
// 狗類特有的方法“狗吃狗糧”
public void eat() {
System.out.println("狗吃狗糧");
}
}public class Test {
public static void main(String[] args) {
// 實(shí)例化寵物對(duì)象
Animal d = new Dog();
d.play();
d.sleep();
// The method eat() is undefined for the type Animal
// 對(duì)于類型動(dòng)物,eat()方法未定義
// 當(dāng)我們?nèi)フ{(diào)用子類對(duì)象的特有方法時(shí),就會(huì)爆出上面的錯(cuò)誤提示
// 如果想要實(shí)現(xiàn)子類特有方法,就必須要強(qiáng)轉(zhuǎn)
// d.eat();
((Dog) d).eat();
}
}
運(yùn)行輸出:

場(chǎng)景二:使用父類作為方法返回值實(shí)現(xiàn)多態(tài),使方法可以返回不同子類對(duì)象。
示例:
//動(dòng)物類 父類
public class Animal {
public void food() {
System.out.println("...");
}
}//用extends關(guān)鍵字,繼承父類屬性
public class Dog extends Animal {
public void food() {
System.out.println("狗吃狗糧");
}
public void runing() {
System.out.println("一直跑跑跳跳");
}
}//用extends關(guān)鍵字,繼承父類屬性
public class Fish extends Animal {
public void food() {
System.out.println("大魚(yú)吃小魚(yú),小魚(yú)吃蝦米");
}
public void swimming() {
System.out.println("小魚(yú)兒,一直游");
}
}public class Master {
// 傳入你的動(dòng)物,并去給它喂食
public void food(Animal animal) {
System.out.println("喂食");
animal.food();
}
}import java.util.Scanner;
public class Shopping {
// 你沒(méi)有動(dòng)物,所以animal為空
Animal animal = null;
// 判斷你要購(gòu)買的寵物,并返回寵物類(狗、魚(yú))
public Animal shopping(int a) {
if (a == 1) {
animal = new Dog();
} else if (a == 2) {
animal = new Fish();
}
// this.animal=animal;
return animal;
}
public void showMenu() {
Scanner input = new Scanner(System.in);
System.out.println("歡迎來(lái)到一只寵物寵物店");
System.out.println("請(qǐng)選擇喜歡的寵物:");
System.out.println("1.狗 2.魚(yú) ");
int a = input.nextInt();
Animal animal = shopping(a);
Master mm = new Master();
mm.food(animal);
// 用instanceof判斷你買的是狗還是魚(yú)。
// 狗就執(zhí)行狗的屬性和方法,魚(yú)就執(zhí)行魚(yú)的屬性和方法
if (animal instanceof Dog) {
Dog d = (Dog) animal;
d.runing();
} else if (animal instanceof Fish) {
Fish f = (Fish) animal;
f.swimming();
}
}
}//測(cè)試類
public class text {
public static void main(String[] args) {
Shopping shop = new Shopping();
shop.showMenu();
}
}
運(yùn)行結(jié)果:

2)多態(tài)的靜態(tài)和動(dòng)態(tài)實(shí)現(xiàn)
動(dòng)態(tài)綁定:即為重寫/覆蓋,方法的重寫
動(dòng)態(tài)綁定也叫后期綁定,在運(yùn)行時(shí),虛擬機(jī)根據(jù)具體對(duì)象實(shí)例的類型進(jìn)行綁定,或者說(shuō)是只有對(duì)象在虛擬機(jī)中運(yùn)行創(chuàng)建了之后,才能確定方法屬于哪一個(gè)對(duì)象實(shí)例的
根據(jù)實(shí)際對(duì)象是什么,就去找相應(yīng)對(duì)象方法去執(zhí)行。
動(dòng)態(tài)綁定是在運(yùn)行時(shí)才會(huì)執(zhí)行(例如重寫的方法)。
靜態(tài)綁定:即為重載,方法的重載
一個(gè)方法的參數(shù)在編譯階段常被靜態(tài)地綁定,它是根據(jù)參數(shù)列表的不同來(lái)區(qū)分不同的函數(shù),通過(guò)編輯之后會(huì)變成兩個(gè)不同的函數(shù)
根據(jù)類型找相應(yīng)的屬性或者靜態(tài)變量。
靜態(tài)綁定是在編譯時(shí)執(zhí)行(如成員變量,靜態(tài)方法)。
關(guān)于“java的三大特性怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“java的三大特性怎么使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享名稱:java的三大特性怎么使用
地址分享:http://www.dlmjj.cn/article/psgiid.html


咨詢
建站咨詢
