Java第十二天(JavaSE 0基础撒花)

Java第十二天(JavaSE 0基础撒花),第1张

Java0基础完美撒花(最后有彩蛋噢)

关于Java中的super关键词:
一.super是一个关键词,全部小写。
二.super和this对比着学习。
-------this---------------------
1)this:this能出现在实例方法和构造方法中。
2)this的语法:"this.“和"this()”
3)this不能使用在静态方法中。
4)this.大部分情况下是可以省略的。
5)this.什么时候不能省略呢?在区分局部变量和实例变量的时候不能省略。

	public void setName(String name){
		this.name=name;
	}

6)this()只能出现在构造方法的第一行,通过当前的构造方法去调用"本类"中其他的构造方法,目的是:代码复用。
-------super--------------------
1)super:super能出现在实例方法和构造方法中。
2)super的语法:“super.“和"super()”
3)super不能使用在静态方法中。
4)super.大部分情况下是可以省略的。
5)super.什么时候不能省略呢?父类中有,子类中又有,如果想在子类中访问"父类的特征”,super,不能省略
6)super()只能出现在构造方法的第一行,通过当前的构造方法去调用"父类"中其他的构造方法,目的是:创建子类对象的时候,先初始化父类型特征。
三.super()
1)表示通过子类的构造方法调用父类的构造方法
2)模拟现实世界中的这种场景:要想有儿子,需要现有父亲
四.重要的结论:
当一个构造方法的第一行:既没有this(),也没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父亲的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。
五.注意:
this()和super()不能共存,它们都是只能出现在构造方法第一行。
六.无论是怎样折腾,父类的构造方法是一定会执行的。(百分百的)

样例no1:
思考1:super(实参)到底是干啥的?
super(实参)的作用是:初始化当前对象的父类型特征。并不是创建新对象,实际上对象只创建了一个。
思考2:super关键字代表什么呀?
super关键字代表的就是"当前对象"的那部分父类型特征。
我继承了我父亲的一部分特征:
例如:眼睛、皮肤等
super代表的就是"眼睛、皮肤等"
"眼睛、皮肤等"虽然是继承了父亲的,但这部分是在我自己身上。

//测试程序
public class Main {
    public static void main(String[] args) {
        CrediAccount ca1=new CrediAccount();
        System.out.println(ca1.getActno()+","+ ca1.getBalance()+","+ca1.getCredit());
        //null,0.0,0.0
        CrediAccount ca2=new CrediAccount("1111",1000.0,0.999);
        System.out.println(ca2.getActno()+","+ ca2.getBalance()+","+ca2.getCredit());
        //1111,1000.0,0.999
    }
}
//账户
class Account{
    //属性
    private String actno;
    private double balance;

    //构造方法
    public Account(){

    }
    public Account(String actno, double balance) {
        this.actno = actno;
        this.balance = balance;
    }

    //setter和getter
    public String getActno() {
        return actno;
    }
    public void setActno(String actno) {
        this.actno = actno;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
}
//xyk
class CrediAccount extends Account{
    //属性:信誉度(诚信度)
    //子类特有的一个特征,父类没有
    private double credit;

    //构造方法
    //分析一下程序是否存在编译错误?
    public CrediAccount(String actno,double balance,double credit){
        //私有的属性,只能在本类中访问
        /*
            this.actno=actno;
            this.balance=balance;
        */

        //以上两行代码在恰当的位置,正好可以使用:super(actno,balance);
        //通过子类的构造方法调用父类的构造方法。
        super(actno,balance);
        this.credit=credit;
    }
    //提供无参数的构造方法
    public CrediAccount(){

    }
    //setter和getter
    public double getCredit() {
        return credit;
    }
    public void setCredit(double credit) {
        this.credit = credit;
    }
}

样例2:

public class Main {
    public static void main(String[] args) {
        Vip v=new Vip("张三");
        v.shopping();
    }
}
class Customer{
    String name;
    public Customer(){}
    public Customer(String name){
        super();
        this.name=name;
    }
}
class Vip extends Customer{
    //假设子类也有一个同名属性
    //java中允许子类中出现和父类一样的同名变量/同名属性
    String name;//实例变量
    public Vip(){}
    public Vip(String name){
        //以下这种情况输出全为,张三在购物
        /*super(name);
        this.name=name;
        */

        //以下这种情况输出分别为,张三、null、张三  在购物
        /*super();
        this.name=name;
        */

        //以下这种情况输出为,null、张三、null  在购物
        //父类和子类中有同名同类型变量时,访问父类就不能省super
        super(name);
    }
    public void shopping(){
        System.out.println(this.name+"正在购物");//null正在购物
        System.out.println(super.name+"正在购物");//张三正在购物
        System.out.println(name+"正在购物");//null正在购物
    }
}

小结:
1.this:
1)this.属性名
2)this.方法名(实参)
3)this(实参)
2.super:
1)super.属性名
2)super.方法名(实参)
3)super(实参)
4)super就代表父
彩蛋1号!!!
system.exit(0);是退出JVM的语句!
彩蛋2号!!!
你猜猜…hhh…没了!!!
最后,希望在学Java的同学不负青春不负己!!!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存