欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java的super关键字问题(1)

程序员文章站 2022-09-17 08:43:05
对于Java初学者来说,this关键字和super关键字有时会傻傻分不清,今天笔者将把super和this放在一起对比说明,希望对读者有所帮助一、super和this:this:1、可以出现在实例方法和构造方法中2、this不能使用在静态方法中3、“this.”大部分情况可以省略(在区*部和实例变量时不可省略)4、this出现在构造方法第一行,通过当前构造方法调用“本类“”中其他构造方法,达到代码复用super:1、可以出现在实例方法和构造方法中2、super不能使用在静态方法中3、“...

对于Java初学者来说,this关键字和super关键字有时会傻傻分不清,今天笔者将把super和this放在一起对比说明,希望对读者有所帮助

一、super和this:

this:

1、可以出现在实例方法和构造方法中
2、this不能使用在静态方法中
3、“this.”大部分情况可以省略(在区*部和实例变量时不可省略)
4、this出现在构造方法第一行,通过当前构造方法调用“本类“”中其他构造方法,达到代码复用

super:

1、可以出现在实例方法和构造方法中
2、super不能使用在静态方法中
3、“super.”大部分情况可以省略
4、super()只能出现在构造方法第一行,通过当前构造方法调用“父类“”中其他构造方法,目的是创建子类型对象的时候先初始化父类型特征
5、super()表示通过子类的构造方法调用父类的构造方法
6、一个类若没有手动提供任何构造方法,系统默认提供一个无参数构造方法
7、一个类如果手动提供了一个构造方法,那么无参数构造系统将不再提供

二、super易错点:

当一个构造方法第一行既没有this()也没有super()的话,默认
会有一个super()表示通过当前子类的构造方法调用父类的无参数构造方法,所以必须保证父类的无参数构造方法是存在的。因为this()和super()不能共存,都是只能出现在构造方法第一行(无论如何父类的构造方法一定会执行)

三、super(实参)的用法:

1、首先定义一个Account类:

static class Account {

    //账号
    private String actno;

    //余额
    private double balance;
}

2、定义一个CreditAccount类去继承Account:

static class CreditAccount extends Account {

    //信誉度(子类特有的特征,父类没有)
    private double credit;
    
    public CreditAccount(String actno, double balance, double credit) {
            this.actno = actno;
            this.balance = balance;
            this.credit = credit;
    }
}

以上写法会报错,因为在父类Account中actno,balance和credit均被定义为私有属性,子类中不可调用,故报错。

3、解决方式:

static class CreditAccount extends Account {

    //信誉度(子类特有的特征,父类没有)
    private double credit;
    
    public CreditAccount(String actno, double balance, double credit) {
        super(actno, balance);
        this.credit = credit;
    }
}
上面代码显示,虽然子类中不可以调用父类中的private属性。但是子类可以通过super(实参)去继承父类中已有属性,再加上自己的特有属性。这样一来就巧妙避免了子类无法调取父类私有属性的问题。

四、说明:

在构造方法执行过程中一连串调用了父类的构造方法,父类的构造方法又继续向下调用他自己的父类的构造方法,但实际上对象只创建了一个。
下附JVM内存图帮助理解:

Java的super关键字问题(1)

本文地址:https://blog.csdn.net/DavidGarrett/article/details/107693837

相关标签: Java class