子類如何使用父類方法


因為子類已經繼承了父類的所有方法,子類也未去重寫這些方法,這些方法實際上已經屬於子類,那么使用時,如果我們不寫this或super,類也不報錯;使用this或super也正確。那我們什么也不寫的那種情況到底默認是哪個?

看看下面的代碼

package com.java.three;  
  
public class Father {  
      
    public void printTheInfomationOfThisMan(){  
        System.out.println(this.toString());  
    }  
      
    public String name="父親name";  
    public int age=55;  
    public String sex="";  
      
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
    public String getSex() {  
        return sex;  
    }  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
    @Override  
    public String toString() {  
        return "Father [name=" + name + ", age=" + age + ", sex=" + sex + "]";  
    }  
  
}  
package com.java.three;  
  
public class Son extends Father{  
  
      
    public String ambution;  
  
    public String getAmbution() {  
        return ambution;  
    }  
    //使用this給變量賦值  
    public void setAmbution(String ambution) {  
        this.ambution = ambution;  
    }  
      
      
      
    //使用super給變量賦值  
    public void superSetInfoToSon(String name,int age){  
        super.setName(name);  
        super.setAge(age);  
    }  
      
    //使用this給變量賦值  
    public void thisSetInfoToSon(String name,int age){  
        this.setName(name);  
        this.setAge(age);  
    }  
      
    //這是我們要研究的重點,看看這種方式到底改變的是this的變量還是super的變量  
    //不適用this,也不使用super,給變量賦值  
    public void setInfoToSonWithoutNeither(String name,int age){  
        name=name;  
        age=age;  
    }  
      
      
      
      
    public void printTheInfomationOfSon(){  
        System.out.println(this.toStringOfSon());  
    }  
    public void printTheInfomationOfFather(){  
        System.out.println(this.toStringOfFather());  
    }  
  
    //注意下面關鍵字this的使用  
    public String toStringOfSon() {  
        return "Son [ambution=" + this.ambution + ", name=" + this.name + ", age=" + this.age  
                + ", sex=" + this.sex + "]";  
    }  
    //注意下面關鍵字super的使用  
    public String toStringOfFather() {  
        return "Son [ambution=" + ambution + ", name=" + super.name + ", age=" + super.age  
                + ", sex=" + super.sex + "]";  
    }  
  
}  
package com.java.three;  
  
public class Testmain {  
      
    public static void main(String ssd[]){  
//      Father ff=new Father();  
//      ff.setName("父親");  
//      ff.setAge(55);  
//      ff.printTheInfomationOfThisMan();  
          
        Son ss=new Son();  
          
        System.out.println("----------------this--start-----------------------");  
        ss.thisSetInfoToSon("給兒子命名this", 26);////使用this給變量賦值  
        ss.setAmbution("億萬富翁");//子類自己的方法  
        //ss.printTheInfomationOfThisMan();//繼承父類的方法  
          
        ss.printTheInfomationOfSon();//子類自己的方法,打印自己的變量this  
        ss.printTheInfomationOfFather();//子類自己的方法,打印父類的變量super  
        System.out.println("----------------this--end-----------------------");  
          
          
        System.out.println("----------------super--start-----------------------");  
        ss.superSetInfoToSon("給兒子命名super", 25);//使用super給變量賦值  
        ss.printTheInfomationOfSon();//子類自己的方法,打印自己的變量this  
        ss.printTheInfomationOfFather();//子類自己的方法,打印父類的變量super  
          
        System.out.println("----------------super--end-----------------------");  
        System.out.println("");  
        System.out.println("----------------注意!!!-----------------------");  
        System.out.println("----------------neither--start-----------------------");  
          
        //注意下面我們設置的信息是("給兒子命名neither", 18)  
        ss.setInfoToSonWithoutNeither("給兒子命名neither", 18);//不適用this,也不使用super,給變量賦值  
        ss.printTheInfomationOfSon();//子類自己的方法,打印自己的變量this  
        ss.printTheInfomationOfFather();//子類自己的方法,打印父類的變量super  
        System.out.println("----------------neither--end-----------------------");  
    }  
  
}  

控制台打印:

----------------this--start-----------------------  
Son [ambution=億萬富翁, name=給兒子命名this, age=26, sex=男]  
Son [ambution=億萬富翁, name=給兒子命名this, age=26, sex=男]  
----------------this--end-----------------------  
----------------super--start-----------------------  
Son [ambution=億萬富翁, name=給兒子命名super, age=25, sex=男]  
Son [ambution=億萬富翁, name=給兒子命名super, age=25, sex=男]  
----------------super--end-----------------------  
  
----------------注意!!!-----------------------  
----------------neither--start-----------------------  
Son [ambution=億萬富翁, name=給兒子命名super, age=25, sex=男]  
Son [ambution=億萬富翁, name=給兒子命名super, age=25, sex=男]  
----------------neither--end-----------------------  

結論:子類繼承的變量就是自己的,無論用this,或是用super都一樣。

還有一個問題我沒看明白,希望高手解答:
我們預想應該輸出的("給兒子命名neither", 18)這個信息無論用this取,還是用super取,都取不出來!

ublic void setInfoToSonWithoutNeither(String name,int age){ 
name=name; 
age=age; 

因為 你這倆形參名 和 父類的屬性名重復了
所以這里的 name=name;和 age=age; 使用的是局部變量了
就是 自己=自己 的意思


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM