溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java類(lèi)、封裝、繼承的方法

發(fā)布時(shí)間:2022-03-14 09:13:00 來(lái)源:億速云 閱讀:110 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“Java類(lèi)、封裝、繼承的方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java類(lèi)、封裝、繼承的方法”吧!

什么是類(lèi)成員

使用static修飾的成員方法和成員變量稱(chēng)為類(lèi)成員

使用static修飾的成員變量叫做類(lèi)變量

使用static修飾的成員方法叫做類(lèi)方法

什么是實(shí)例變量

未使用static修飾的成員方法和成員變量稱(chēng)為實(shí)例成員

未使用static修飾的成員變量叫做實(shí)例變量

未使用static修飾的成員方法叫做實(shí)例方法

例如:

public String name;  //這個(gè)就是實(shí)例成員(屬性) 
public static int age;//這個(gè)就是類(lèi)成員(屬性) 

public void a(){
	System.out.println("我叫:"+this.name)
}                                    //這個(gè)沒(méi)有加static的方法就是實(shí)例方法

public static void a(){           	//這個(gè)加了static的方法就是類(lèi)方法
	System.out.println("我叫:"+this.name)
}

那么實(shí)例變量和類(lèi)變量的區(qū)別呢?

  • 所有該類(lèi)的對(duì)象共享同一個(gè)類(lèi)變量,但是每個(gè)對(duì)象都會(huì)有自己獨(dú)特的實(shí)例變量

  • 所有該類(lèi)的對(duì)象都能改變類(lèi)變量的值,但是每個(gè)對(duì)象只能改變自己的實(shí)例變量值

  • 實(shí)例變量在使用前必須創(chuàng)建一個(gè)對(duì)象,根據(jù)對(duì)象名.變量名使用,但是類(lèi)變量不需要?jiǎng)?chuàng)建對(duì)象

//定義一個(gè)類(lèi)
public class stu {
    public String name;  //這個(gè)類(lèi)有一個(gè)名字這個(gè)屬性,屬于實(shí)例成員,也就是需要實(shí)例化對(duì)象了才可以使用
    //定義構(gòu)造方法
    public stu(){}    //不管怎么樣,都定義一個(gè)無(wú)參構(gòu)造
    public stu(String name){    //定義有參構(gòu)造,需要傳入一個(gè)字符串名字
       this.name = name;         //這里若不使用this 關(guān)鍵字,那么是不會(huì)與上面的實(shí)例屬性匹配
    }
    //定義方法
    public void a(){
        System.out.println(this.name);
    }
}

使用該類(lèi):

public class stu_Test {
    public static void main(String[] args) {
        //實(shí)例化兩個(gè)對(duì)象,基于stu類(lèi)
        stu s1 = new stu("小紅");   
        stu s2 = new stu("小王");
        //使用stu類(lèi)里面的方法
        s1.a();
        s2.a();
    }
    
    //stu s1 = new stu("小紅");  將會(huì)輸出小紅
    //stu s2 = new stu("小王");  將會(huì)輸出小王
}
//通過(guò)這個(gè)就可以明白每個(gè)對(duì)象都有屬于自己的實(shí)例變量(屬性)

那么類(lèi)方法和實(shí)例方法的區(qū)別?

  • 所有該類(lèi)對(duì)象共享類(lèi)方法和實(shí)例方法

  • 類(lèi)方法使用類(lèi)名.方法名([參數(shù)])調(diào)用即可,不需要實(shí)例化對(duì)象后使用

  • 實(shí)例方法使用對(duì)象名.方法名([參數(shù)])調(diào)用

static關(guān)鍵字

Java類(lèi)提供了兩種類(lèi)型的變量:用static關(guān)鍵字修飾的靜態(tài)變量和不用static關(guān)鍵字修飾的實(shí)例變量。 靜態(tài)變量屬于類(lèi),在內(nèi)存中只有一個(gè)復(fù)制,只要靜態(tài)變量所在的類(lèi)被加載,這個(gè)靜態(tài)變量就會(huì)被分配空間,因此就可以被使用了。對(duì)靜態(tài)變量的引用有兩種方式,分別是“類(lèi).靜態(tài)變量"和”對(duì)象.靜態(tài)變量"

static成員方法:

  • static方法是類(lèi)的方法,不需要?jiǎng)?chuàng)建對(duì)象就可以被調(diào)用,而非static方法是對(duì)象的方法,只有對(duì)象被創(chuàng)建出來(lái)后才可以被使用

  • static方法中不能使用this和super關(guān)鍵字,不能調(diào)用非static方法,只能訪問(wèn)所屬類(lèi)的靜態(tài)成員變量和成員方法,因?yàn)楫?dāng)static方法被調(diào)用時(shí),這個(gè)類(lèi)的對(duì)象可能還沒(méi)被創(chuàng)建,即使已經(jīng)被創(chuàng)建了,也無(wú)法確定調(diào)用哪個(gè)對(duì)象的方法。

static用處:

  • 修飾成員變量

  • 修飾成員方法

  • 靜態(tài)代碼塊

  • 修飾類(lèi)【只能修飾內(nèi)部類(lèi)也就是靜態(tài)內(nèi)部類(lèi)】

  • 靜態(tài)導(dǎo)包

static注意事項(xiàng): 靜態(tài)只能訪問(wèn)靜態(tài),非靜態(tài)既可以訪問(wèn)非靜態(tài)的,也可以訪問(wèn)靜態(tài)的。

封裝:

封裝的概念

把客觀事物封裝成抽象的類(lèi),并且類(lèi)可以把自己的屬性和方法只讓可信的類(lèi)或者對(duì)象進(jìn)行操作,對(duì)不可信的類(lèi)或者對(duì)象隱藏,這樣的過(guò)程叫做封裝。 簡(jiǎn)而言之:把自己的信息封閉起來(lái),只給自己信任的人看和使用

封裝的分類(lèi)

  • 對(duì)屬性的封裝:將屬性設(shè)置為private(私有),限制其只能在類(lèi)的內(nèi)部使用

  • 對(duì)方法的封裝:對(duì)于方法的封裝,將外部可以訪問(wèn)方法設(shè)置為public,將外部不能訪問(wèn)的方法設(shè)置為private

封裝的使用

在將封裝之前,我們先學(xué)習(xí)一下一個(gè)新的修飾符:private private:限制其只能在類(lèi)的內(nèi)部使用(也就是說(shuō)被private修飾的方法和屬性,只能在這個(gè)類(lèi)內(nèi)被發(fā)現(xiàn)和使用,在這個(gè)類(lèi)外,是找不到這個(gè)屬性的存在,這也達(dá)到了封裝的效果)

//給name這個(gè)屬性進(jìn)行封裝
private Strint name; //即可,這也我們?cè)陬?lèi)外是找不到這個(gè)屬性的存在的

既然封裝了,肯定也有對(duì)這個(gè)封裝進(jìn)行修改和使用的方法,是的,這就是get/set方法

get/set方法

public class stu {
    private String name; 
    public void setName(String name){    //set方法:對(duì)象調(diào)用這個(gè)方法,即可對(duì)私有屬性進(jìn)行修改
        this.name = name;   
    }
    public String getName(){         //get方法:對(duì)象調(diào)用這個(gè)方法,就可以使用該方法
        return name;
    }
}

使用:

public class stu_Test {
    public static void main(String[] args) {
    stu s =new stu();
    s.setName("小紅");  //給name 這個(gè)私有屬性修改值為小紅
        System.out.println(s.getName());
   
}

//程序運(yùn)行后,輸出值就是小紅

繼承:

什么是繼承

1:一個(gè)新類(lèi)可以從現(xiàn)有的類(lèi)派生,這樣的過(guò)程叫做繼承

2:在繼承的過(guò)程中,新類(lèi)被稱(chēng)為子類(lèi),現(xiàn)有的類(lèi)被稱(chēng)為父類(lèi),子類(lèi)將會(huì)繼承父類(lèi)的屬性和行為。

繼承語(yǔ)法:

public class stu extends Student{   //在類(lèi)名后加上extends,在寫(xiě)上繼承的父類(lèi)即可
//這里可以寫(xiě)父類(lèi)沒(méi)有發(fā)屬性及方法
	public String ID;  //等等等等

}

注意: 繼承不能繼承父類(lèi)的私有屬性和方法?。?!只要被private修飾的,都不被繼承?。?!

關(guān)于子類(lèi): 子類(lèi)除了可以擁有父類(lèi)非私有的屬性和方法外,也可以擴(kuò)展自己的屬性和方法

繼承的使用:

  • 繼承是單繼承,也就是一個(gè)類(lèi)只能有一個(gè)父類(lèi)。

  • 如果一個(gè)類(lèi)沒(méi)有顯式的繼承某一個(gè)類(lèi),那么它有一個(gè)默認(rèn)的父類(lèi)是java.lang.Object類(lèi)

  • 繼承了父類(lèi)非私有的成員變量和成員方法,但是請(qǐng)注意:子類(lèi)是無(wú)法繼承父類(lèi)的構(gòu)造方法的

簡(jiǎn)而言之:一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi),如果這個(gè)類(lèi)沒(méi)有繼承別的類(lèi),默認(rèn)繼承Object類(lèi)(Java自帶)

無(wú)法繼承父類(lèi)的構(gòu)造方法。

方法的重寫(xiě):

@overriding

什么是方法重寫(xiě)?:

  • 子類(lèi)根據(jù)需求從父類(lèi)繼承的方法進(jìn)行重新編寫(xiě)(方法名一樣)

  • 重寫(xiě)是可以使用super方法的方式來(lái)保留父親的方法(super在后面講到)

注意:構(gòu)造方法不能被重寫(xiě)

方法重寫(xiě)的規(guī)則:

  • 方法名相同,參數(shù)列表相同(數(shù)量,順序,數(shù)據(jù)類(lèi)型)

  • 如果有返回值,返回值相同或者是其子類(lèi),訪問(wèn)權(quán)限不能?chē)?yán)于父類(lèi)

  • 父類(lèi)的靜態(tài)方法不能被重寫(xiě)為非靜態(tài)方法,反之父類(lèi)的非靜態(tài)方法不能被重寫(xiě)為靜態(tài)方法

  • 子類(lèi)可以定義與父類(lèi)同名的靜態(tài)方法,以便在子類(lèi)中隱藏父類(lèi)的靜態(tài)方法**(靜態(tài)方法中無(wú)法使用super、this)**

  • 父類(lèi)的私有方法不能被子類(lèi)重寫(xiě)(private修飾的)

上代碼:

1:定義一個(gè)類(lèi),有名字和年齡的屬性,分別有g(shù)et/set方法,成員方法是輸出名字和年齡:

public class Person {
    private String name;
    private int age;

    //get/ste方法
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }

    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }
    //成員方法:
    public void print(){
        System.out.println("我叫:"+this.name+","+"我今年:"+this.age+"歲");
    }
}

2:寫(xiě)一個(gè)類(lèi),繼承Person類(lèi),并且這個(gè)類(lèi)擁有自己的一個(gè)sex屬性,提供get/set方法 并且重寫(xiě)父類(lèi)的print方法,輸出名字+年齡+性別

public class child extends Person{
    private String sex;      //這個(gè)child類(lèi)繼承了Person類(lèi),但也擁有自己的屬性 sex性別
    public void setSex(String sex){
        this.sex = sex;
    }
    public String getSex(){
        return sex;
    }
    @Override
    //重寫(xiě)父類(lèi)方法: 因?yàn)楦割?lèi)是輸出名字和年齡,這里要輸出名字,年齡和性別
    public void print(){
        System.out.println("我叫:"+getName()+","+"我今年:"+getAge()+"歲"+","+"我是"+sex+"孩子");
    }
}

3:新建測(cè)試類(lèi),測(cè)試兩個(gè)類(lèi)的繼承、重寫(xiě)

//測(cè)試類(lèi),
public class Test {
    public static void main(String[] args) {
        child c = new child();
        c.setName("小紅");
        c.setAge(20);
        c.setSex("男");
        c.print();
    }
}
//分別執(zhí)行child繼承person的set方法,使用重寫(xiě)后的方法,

//輸出結(jié)果為: 我叫:小紅,我今年:20歲我是男孩子

super關(guān)鍵字:

super代表的是父類(lèi)對(duì)象

super的使用方式:

1:super.屬性名 用于在子類(lèi)中調(diào)用父類(lèi)被隱藏的同名實(shí)例變量

2:super([參數(shù)列表]) 用于在子類(lèi)的構(gòu)造方法中調(diào)用父類(lèi)的構(gòu)造方法

注意事項(xiàng):

  • 每一個(gè)子類(lèi)的構(gòu)造方法在沒(méi)有顯示調(diào)用super(),系統(tǒng)都會(huì)提供一個(gè)默認(rèn)的super()

  • super() 書(shū)寫(xiě)在第一行

  • 可以在子類(lèi)構(gòu)造方法中顯示調(diào)用super(),完成對(duì)特定父類(lèi)構(gòu)造方法的調(diào)用

簡(jiǎn)而言之:super就是調(diào)用父親的屬性和方法來(lái)使用

上代碼:

1:新建一個(gè)類(lèi):定義age為20

public class super_test {
    public int age=20;
    public void print(){
        System.out.println(this.age);
    }
}

2:建第二個(gè)類(lèi),繼承第一個(gè)類(lèi);

public class su2 extends super_test{
    public int age = 10;
    @Override
    public void print(){
        System.out.println(super.age);  //這里使用super,意思是使用父類(lèi)的age
    }
}

3:建立測(cè)試類(lèi):

public class test {
    public static void main(String[] args) {
    su2 s = new su2();
    s.print();
	}
}

這樣輸出的就是20,是父類(lèi)的age Java類(lèi)、封裝、繼承的方法

this與super的區(qū)別:

  • super: 它引用當(dāng)前對(duì)象的直接父類(lèi)中的成員(用來(lái)訪問(wèn)直接父類(lèi)中被隱藏的父類(lèi)中成員數(shù)據(jù)或函 數(shù),基類(lèi)與派生類(lèi)中有相同成員定義時(shí)如:super.變量名 super.成員函數(shù)據(jù)名(實(shí)參)

  • this:它代表當(dāng)前對(duì)象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來(lái)指明當(dāng)前對(duì)象;如果函數(shù)的 形參與類(lèi)中的成員數(shù)據(jù)同名,這時(shí)需用this來(lái)指明成員變量名

  • super()和this()類(lèi)似,區(qū)別是,super()在子類(lèi)中調(diào)用父類(lèi)的構(gòu)造方法,this()在本類(lèi)內(nèi)調(diào)用本類(lèi)的其 它構(gòu)造方法。

  • super()和this()均需放在構(gòu)造方法內(nèi)第一行,盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)

  • this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造 函數(shù)必然也會(huì)有super語(yǔ)句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語(yǔ)句,就失去了語(yǔ)句的意 義,編譯器也不會(huì)通過(guò)。

  • this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括: static變量,static方法,static語(yǔ)句塊。

  • 從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

感謝各位的閱讀,以上就是“Java類(lèi)、封裝、繼承的方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java類(lèi)、封裝、繼承的方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI