this的HXD“super”关键字

33 篇文章 0 订阅
31 篇文章 0 订阅

this的HXD“super”关键字

我们都知道java中的关键字this来解决重名的问题,即 this.属性 或者 this.方法 的方式来处理同名问题,这是我们显示的使用该关键字。那是因为它一直都在属性或者方法前悄咪咪的待着,只不过不同名时,它不露头而已。最近,我发现个神奇的关键字,它居然和this神似,但是又有所不同,它就是super关键字。
一.super的理解(以及super调方法和属性)
1.super的作用:可以用来区分重写与重写后的类
2.super的使用范围:属性,方法,构造器
3.使用方式:super.属性 / 方法 / 构造器
4.super的说明:
第一点:在有子类的类中,通常用super.属性或者super.方法的方式显式的调用父类中声明的属性和方法,但是通常会忽略super和this(好兄弟一起说,嘿嘿)
第二点:特别的,当父子类中定义了同名的属性时,我们要存子类中调用父类中的属性时,必须使用super.属性名(表示来自父类的)
第三点:方法和属性一样都符合第二点说明的。
如下例子:
父类:

public class hero{
    int age;
    String name="JACK";
    boolean ismale;
    public hero(){
    }
    public hero(String name1, String abi){
        System.out.println(name1+"的能力是"+abi);
    }
    public void achievement(){
            System.out.println("我外星人干掉了");
    }
}

子类:

public class superman extends hero {
    String wuqi;
    String name="TOM";
    public superman(){
    }
    public void achievement(){
            System.out.println("我已经干掉100个外星人了");
    }
    public void show(String wuqi){
        this.wuqi=wuqi;
        System.out.println("他的名字是:"+name+"\t"+"我的名字是:"+super.name);
    }
}

最后测试:

public class ishero {
    public static void main(String[] args) {
        superman king=new superman();
        king.show("猫和老鼠");
    }
}

最后我们发现,结果是:
他的名字是:TOM 我的名字是:JACK
经过回头查看可以看出来,加了super哪一个name输出的名字是父类中的属性,而不是子类中的。(这是属性,方法也类似)

二.super调用构造器
首先,注意点提前说明:
1.我们可以在子类的构造器中显示的使用”super(形参列表)“的方式来调用父类中声明的指构造器。
2.super(形参列表)必须使用在首行,否则无效。
3.this和super二者只能同时用一个,一山难容二虎。
4.当我们在未在构造器中用这俩兄弟时候,则系统会默认为super()的形式。
5.在类的多个构造器中,一定有super()的构造器,去调用父类中的构造器。
如下例子:
父类:

public class hero{
    int age;
    String name="JACK";
    boolean ismale;
    public hero(){
        System.out.println("无处不在");
    }
    public hero(String name1, String abi){
        System.out.println(name1+"的能力是"+abi);
    }
    public void achievement(){
            System.out.println("我外星人干掉了");
    }
}

子类:

public class superman extends hero {
    String wuqi;
    String name="TOM";
    public superman(){
    }
    public void achievement(){
            System.out.println("我已经干掉100个外星人了");
    }

测试:

public class ishero {
    public static void main(String[] args) {
        superman king=new superman();
    }
}

结果是:
无处不在
如此可见,虽然我们创建的是superman的对象,但是我们会得到父类构造器中的无处不在,由此可见,superman类中的构造器用了super(),其实,类中的第一空构造器的另一种写法是:

public superman{
	super();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值