小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java面向?qū)ο笾校悍椒ㄖ剌d和方法重寫以及區(qū)別、 this關(guān)鍵字和super關(guān)鍵字以及區(qū)別

 頭號(hào)碼甲 2021-07-20

2020-04-13

Java面向?qū)ο笾校悍椒ㄖ剌d和方法重寫 、  this關(guān)鍵字和super關(guān)鍵字

 

方法重載:是指同一個(gè)類中的多個(gè)方法具有相同的名字,但這些方法具有不同的參數(shù)列表,即參數(shù)的數(shù)量或參數(shù)類型或者參數(shù)順序不能完全相同;重載是一個(gè)類中多態(tài)性的一種表現(xiàn)

總結(jié):

1.同一個(gè)類中

2.方法名相同

3.參數(shù)列表不同,即參數(shù)的數(shù)量參數(shù)類型參數(shù)順序 不能完全相同

4.對(duì)其他沒有要求,(例如:對(duì)返回值類型沒有要求一致

package com.zzm.trydemo;
/* 方法重載:
 * 1.同一個(gè)類中
 * 2.方法名相同
 * 3.參數(shù)列表不同,即參數(shù)的數(shù)量 或 參數(shù)類型 或 參數(shù)順序 不能完全相同
 * 
 * */
public class Test1_Overload {
    public static void main(String[] args) {
        student();
        student("小明",5);
        student(18,"小紅");
}
    
    public static void student(){
        System.out.println("我是一個(gè)學(xué)生");
    }
    public static void student(String name,int age){
        System.out.println("我是一個(gè)學(xué)生,我叫"+name+",我今年"+age+"歲");
    }
    public static void student(int age,String name){
        System.out.println("我是一個(gè)學(xué)生,我叫"+name+",我今年"+age+"歲");
    }

}

/* 代碼輸出:
 *我是一個(gè)學(xué)生
 *我是一個(gè)學(xué)生,我叫小明,我今年5歲
 *我是一個(gè)學(xué)生,我叫小紅,我今年18歲
 * 
 * */
方法重載案例

 

 

方法重寫:是存在子父類之間的,子類定義的方法與父類中的方法具有相同的方法名字,相同的參數(shù)表和相同的返回類型;

                  重寫是父類與子類之間多態(tài)性的一種表現(xiàn);

                  重寫是為了調(diào)用子類對(duì)象時(shí),改變父類的功能

總結(jié):

1.方法重寫:訪問修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)){代碼...}
2.方法重寫用于繼承中(子類 Extends父類)的子類里--------不在同一個(gè)類中
3.訪問修飾符 權(quán)限: 子類>=父類(public>protected>default>private)
4.返回值類型: 4.1.基本類型 或者 void ---子類和父類相同
                          4. 2.引用類型 -----子類<=父類
5.方法名、參數(shù)列表:子類同父類相同,一模一樣

6. 繼承后,子類就擁有了父類的功能

7. 那么在子類中,可以添加子類特有的功能也可以修改父類的原有功能

8. 子類中方法簽名與父類完全一樣(包括方法的返回值,方法名和參數(shù)列表,完全一致)時(shí),會(huì)發(fā)生覆蓋/復(fù)寫操作,相當(dāng)于修改功能

注意:

1、父類中的私有方法不能被重寫

2、子類重寫父類方法時(shí),修飾符要大于等于父類修飾符的權(quán)限

package com.zzm.trydemo;
/*
 *方法重寫:訪問修飾符  返回值類型  方法名(參數(shù)類型 參數(shù)){代碼...}
 *方法重寫用于繼承中(子類 Extends父類)的子類里---在不同一個(gè)類中
 *訪問修飾符 權(quán)限: 子類>=父類
 *返回值類型:          1.基本類型 或者void ---子類和父類相同
 *             2.引用類型                    ---子類<=父類
 *方法名、參數(shù)列表:子類同父類相同,一模一樣
 */
public class Test2_OverRide {
    public static void main(String[] args) {
        Student1 s=new Student1();
        s.teach();
    }
}
class Teacher1{
    public void teach(){
        System.out.println("老師上課");
    }
    
}
class Student1 extends Teacher1{
    public void teach(){
        System.out.println("學(xué)生聽課");
    }
}

/*
 * 輸出結(jié)果:
 * 學(xué)生聽課
 * 
 * */
方法重寫案例

 

重載與重寫的區(qū)別(Overload和Override的區(qū)別)

1、目的不同

overload用于增加程序的可讀性(做法不同,但是做的同一事情)。  override用于提供其超級(jí)類已經(jīng)提供的方法的特定實(shí)現(xiàn)。  

2、范圍不同

overload 在相同的類范圍內(nèi)內(nèi)執(zhí)行,是一個(gè)類中多態(tài)性的一種表現(xiàn)。  override發(fā)生在兩類具有繼承(繼承)的關(guān)系,是父類與子類之間多態(tài)性的一種表現(xiàn)。

3、參數(shù)不同

overload參數(shù) 必須不同。  override參數(shù) 必須相同。

 

 

this關(guān)鍵字:

1.this 代表本類對(duì)象引用,在本類中使用
2.局部變量和成員變量同名時(shí),用this可調(diào)用本類成員方法或者本類成員變量,調(diào)用方式  this.成員

 

因?yàn)樵跇?gòu)造方法(構(gòu)造函數(shù))中,有個(gè)經(jīng)典的this用法,所以也順便提一提

構(gòu)造方法(構(gòu)造函數(shù))構(gòu)造方法是與類同名,且 沒有返回值類型,主要是完成對(duì)象的創(chuàng)建或者對(duì)象的初始化

修飾符 類名(【參數(shù)】){

代碼……

}

package test.constructe;
//構(gòu)造方法創(chuàng)建
public class Constr {
    public static void main(String[] args) {
        Person p=new Person();//無參創(chuàng)建對(duì)象,底層會(huì)自動(dòng)調(diào)用無參構(gòu)造方法
        Person p2=new Person("小明");//含參創(chuàng)建對(duì)象,底層會(huì)自動(dòng)調(diào)用含參構(gòu)造方法
        
    }
}
class Person{
    //構(gòu)造方法,與類同名,修飾符 類名(參數(shù)列表){方法體}
    public Person(){//默認(rèn)會(huì)存在構(gòu)造方法--前提沒有提供含參構(gòu)造方法
        System.out.println("無參構(gòu)造方法");
    }
    //重載構(gòu)造方法
    public Person(String name){
        System.out.println("含參構(gòu)造方法 "+name);
    }
}

/*
 *無參構(gòu)造方法
 *含參構(gòu)造方法 小明
 * 
 * 
 */
構(gòu)造方法案例
package com.zzm.trydemo;

/*
 *1.this 代表本類對(duì)象引用,在本類中使用    
 *2.局部變量和成員變量同名時(shí),用this可調(diào)用本類成員方法或者本類成員變量
 */

public class Test3_This {
    public static void main(String[] args) {
        ThisDemo td=new ThisDemo();//創(chuàng)建無參構(gòu)造對(duì)象時(shí),就會(huì)自動(dòng)調(diào)用無參構(gòu)造方法
        ThisDemo td2=new ThisDemo(30);
        td2.f1();
    }
}
class ThisDemo{
    int sum=20;
    
    public ThisDemo(){//一般,沒有用也要寫出來
        //this(999);//this 不能在兩個(gè)都早參數(shù)中相互調(diào)用,那是死循環(huán)
        System.out.println("自動(dòng)調(diào)用無參構(gòu)造方法");
    }
    public ThisDemo(int sum){
        this();//在構(gòu)造方法中,放在第一行;在一個(gè)構(gòu)造函數(shù)中可以調(diào)另一個(gè)構(gòu)造函數(shù)
        System.out.println("含參構(gòu)造方法,已經(jīng)傳入值"+sum);
        this.sum=sum;
    }
    
    public void f1(){
        int sum=10;
        System.out.println("就近原則"+sum);
        
        ThisDemo t=new ThisDemo();//又會(huì)調(diào)用一次無參構(gòu)造
        System.out.println("新創(chuàng)建一個(gè)對(duì)象仍然使用的是成員變量的值"+t.sum);//仍然使用的是成員變量的值
        
        System.out.println("使用的傳入的賦值后的值"+this.sum);//使用的傳入的賦值后的值
        
        f2();//同this.f2();意義結(jié)果相同,通常this是隱式,不寫直接調(diào)用,氮實(shí)際上是有this關(guān)鍵字的
    }
    
    public void f2(){
        System.out.println("這是f2");
    } 

}

/*
 * 輸出結(jié)果:
 *自動(dòng)調(diào)用無參構(gòu)造方法
 *自動(dòng)調(diào)用無參構(gòu)造方法
 *含參構(gòu)造方法,已經(jīng)傳入值30
 *就近原則10
 *自動(dòng)調(diào)用無參構(gòu)造方法
 *新創(chuàng)建一個(gè)對(duì)象仍然使用的是成員變量的值20
 *使用的傳入的賦值后的值30
 *這是f2
 * 
 * 
 * */
this案例

 

super關(guān)鍵字:

1、 通過super關(guān)鍵字可以使用父類的內(nèi)容

2、 super代表父類的一個(gè)引用對(duì)象

3、 如果用,必須出現(xiàn)在調(diào)用位置的第一行

4、 不管父類無參構(gòu)造寫沒寫,子類構(gòu)造無參里都有super,隱式了 。一般都要寫無參構(gòu)造,方便。
       如果父類沒有寫無參構(gòu)造,子類的構(gòu)造函數(shù)里必須寫   super(參數(shù))

package com.zzm.trydemo;
/*1、 通過super關(guān)鍵字可以使用父類的內(nèi)容,在子類中使用
 *2、 super代表父類的一個(gè)引用對(duì)象
 *3、 如果用在構(gòu)造方法中,必須出現(xiàn)在調(diào)用位置的第一條語句!!(類似于this) 
 *  
 *4、 不管父類無參構(gòu)造寫沒寫,子類構(gòu)造無參里都有super,隱式了 。一般都要寫無參構(gòu)造,方便
 *  如果父類沒有寫無參構(gòu)造,子類的構(gòu)造函數(shù)里必須寫super(參數(shù))
 * */
public class Test4_Super {
    public static void main(String[] args) {
        Student2 s=new Student2();
    }

}
class Person2{
    int a=1;

    public Person2(){//父類無參構(gòu)造
        System.out.println("無參Person2");
    }
    public Person2(int a){//父類有參構(gòu)造
        System.out.println("有參Person2");
    }
    
    public void f(){
        System.out.println("父類f方法");
    }
     
}
class Student2 extends Person2{
    int a=2;

    public Student2(){//子類無參構(gòu)造
        //super();//先調(diào)用父類的無參構(gòu)造;隱式的,可以不寫,不寫也會(huì)調(diào)用父類的無參構(gòu)造;必須放在第一行
        super(1);//super(1)會(huì)將super()覆蓋掉
        System.out.println("Student2");
        System.out.println("調(diào)用子類的a值"+a);
        System.out.println("調(diào)用父類的a值"+super.a);
        f();
        super.f();
        
    }
    
    public void f(){
        System.out.println("子類f方法");
    }
}


/*
 * 輸出結(jié)果:
 *有參Person2
 *Student2
 *調(diào)用子類的a值2
 *調(diào)用父類的a值1
 *子類f方法
 *父類f方法 
 *
 */
super案例

 

this和super的區(qū)別

1、 this代表本類對(duì)象的引用,super代表父類對(duì)象的引用。

2、 this用于區(qū)分局部變量和成員變量

3、 super用于區(qū)分本類變量和父類變量

4、 this.成員變量  this.成員方法()  this(【參數(shù)】)代表調(diào)用本類內(nèi)容

5、 super.成員變量  super.成員方法()  super(【參數(shù)】),代表調(diào)用父類內(nèi)容

6、 this和super不可以同時(shí)出現(xiàn)在同一個(gè)構(gòu)造方法里,他們兩個(gè)只要出現(xiàn)都得放在第一行

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多