子类如何使用父类方法

因为子类已经继承了父类的所有方法,子类也未去重写这些方法,这些方法实际上已经属于子类,那么使用时,如果我们不写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; 使用的是局部变量了
就是 自己=自己 的意思

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值