Java——super关键字

1、super是关键字,全部小写。

2、super和this对比:

        this:

                this能出现在实例方法和构造方法中。

                this的语法: “this.” 、 “this ()”

                this不能使用在静态方法中。

                this.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。

public void setName(String name){

        this.name = name;

 }

                 this () 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中其他的构造方法,目的是:代码复用。

        super:

                super能出现在实例方法和构造方法中。

                super的语法: “super.” 、 “super ()”

                super不能使用在静态方法中。

                super.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。

                super什么时候不能省略?            

                super () 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,目的是:代码复用。    目的是:创建子类对象的时候,先初始化父类型特征。

3、super () 表示通过子类的构造方法调用父类的构造方法。模拟现实世界中这种场景:要想有儿子,先要有父亲。

4、重要结论:

        当一个构造方法第一行:

                既没有this()又没有super()的话,默认会有一个super();

                表示通过当前子类构造方法调用父类的无参数构造方法。

                所以必须保证父类的无参数构造方法是存在的。

5、this()和super()不共存。

6、无论怎样折腾,父类的构造方法是一定会执行的(100%)。


例题:分析下列程序执行结果

public class SuperTest02 {

	public static void main(String[] args) {
		new C();
		
	}

}

class A {
	public A () {
		System.out.println("A类的无参数构造方法!");//1
	}
}

class B extends A {
	public B () {
		System.out.println("B类的无参数构造方法!");//2
	}
	public B(String name) {
		System.out.println("B类的有参数构造执行(String)");//3
	}
}

class C extends B{
	public C() {
		this("zhangsan");
		System.out.println("C的无参数构造执行!");//4
	}
	public C(String name) {
		this(name,20);
		System.out.println("C的有参数构造执行(String)");//5
	}
	public C(String name,int age) {
		super(name);
		System.out.println("C的有参数构造执行(String,int)");//6
	}
}

结果为: 13654;


在恰当的时候使用 super (实际参数列表);

例:

public class Account {

	private String actnum;
	private double balance;//余额
	
	public Account() {
	}
	public Account(String actnum, double balance) {
		this.actnum = actnum;
		this.balance = balance;
	}
	
	public String getActnum() {
		return actnum;
	}
	public void setActnum(String actnum) {
		this.actnum = actnum;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
public class CreditAccount extends Account{

	private double credit;
	
	public CreditAccount() {
	}



	public double getCredit() {
		return credit;
	}

	public void setCredit(double credit) {
		this.credit = credit;
	}
}

以上Account类已被封装好,在外部不能对actnum和balance进行赋值修改

为了能在CreditAccount中进行一步到位赋值操作,可以在CreditAccount类中使用super ();实现

	public CreditAccount(String actnum, double balance, double credit) {
		super(actnum, balance);
		this.credit = credit;
	}
public static void main(String[] args) {

		CreditAccount ca2 = new CreditAccount("111",10000.0,0.99);
		System.out.println(ca2.getActnum() + ca2.getBalance() + ca2.getCredit());
	}

Super原理图:
Java——super关键字_第1张图片


super(实参)到底是干嘛的?

 super(实参)的作用是:初始化当前对象的父类型特征。

并不是创建新对象,对象只创建了一个,只是在继承父类型特征。

super关键字代表什么

super关键字代表的就是“当前对象” 的那部分父类型特征。

例如:我继承了我父亲的眼睛,鼻子等特征

                super代表的就是“眼睛、鼻子”等特征。

                而“眼睛、鼻子”虽然继承父亲的但这部分在我身上。

This . 和 Super . 什么时候不能省略

this . 什么时候不能省略: 

public void setName(String name){

this.name = name;

}

 super . 什么时候不能省略:

父中有,子中又有,如果想在子中访问“父的特征”,super . 不能省略。

super和this直接使用上的区别

 super不是引用。super也不保存内存地址,super也不指向任何对象。

super只是代表“当前对象” 的那部分父类型特征。

System.out.println( this );        //编译通过

System.out.println( super );     //编译报错

在父和子中有同名的属性或是相同的方法,如果想在子类中访问父类中的数据,必须使用"super . "加以区分 。

super . 属性名:

super .方法名(实参)

super (实参)

你可能感兴趣的:(JAVA笔记,java,p2p,蓝桥杯)