Java学习:十四.super---内存分析

一.程序内存分析

public class SuperTest03 {
    
    
    public static void main(String[] args) {
    
    
    	CreditAccount ca1 = new CreditAccount();
    	System.out.println(ca1.getActno() + "," + ca1.getBalance());
    	CreditAccount ca2 = new CreditAccount("1111", 10000, 999);
    	System.out.println(ca2.getActno() + "," + ca2.getBalance());
    }
}
class Account{
    
    
	private String actno;
	private double balance;
	public Account() {
    
    
		
	}
	public Account(String actno, double balance) {
    
    
		this.actno = actno;
		this.balance = balance;
	}
	public void setActno(String actno) {
    
    
		this.actno = actno;
	}
	public String getActno() {
    
    
		return actno;
	}
	public void setBalance(double balance) {
    
    
		this.balance = balance;
	}
	public double getBalance() {
    
    
		return balance;
	}
}
class CreditAccount extends Account{
    
    
	private double credit;
	public CreditAccount() {
    
    
		
	}
    public CreditAccount(String actno, double balance, double credit) {
    
    
		/*私有属性只能在本类中访问
    	this.actno = actno;
		this.balance = balance;
		*/
    	super(actno, balance);
		this.credit = credit;
	}
	public void setCredit(double credit) {
    
    
		this.credit = credit;
	}
	public double getCredit() {
    
    
	    return credit;	
	}
}

在这里插入图片描述
我们先来分析一下main函数中的前两行代码,内存如下:
在这里插入图片描述
可以看到super(参数)的作用是:初始化当前对象的父类特征,并不是创建对象,对象只有一个。
再接着执行后面两行,内存变化如下:
在这里插入图片描述

二.this和super指向同一变量

public class SuperTest04 {
    
    
    public static void main(String[] args) {
    
    
    	Vip v = new Vip("张三");
    	v.shopping();
    }
}
class Customer1{
    
    
	String name;
	public Customer1() {
    
    }
	public Customer1(String name) {
    
    
		super();
		this.name = name;
	}
}
class Vip extends Customer1{
    
    
	public Vip() {
    
    }
	public Vip(String name) {
    
    
		super(name);
	}
	public void shopping() {
    
    
	    //这里的this表示当前对象
		System.out.println(this.name + "正在购物!");
		//这里的super表示当前对象的父类型特征,super是this指向的对象空间中的一块
		System.out.println(super.name + "正在购物!");
		System.out.println(name + "正在购物!");//name相当于this.name
	}
}

在这里插入图片描述

在这里插入图片描述

三.子类型与父类型有相同变量

public class SuperTest04 {
    
    
    public static void main(String[] args) {
    
    
    	Vip v = new Vip("张三");
    	v.shopping();
    }
}
class Customer1{
    
    
	String name;
	public Customer1() {
    
    }
	public Customer1(String name) {
    
    
		super();
		this.name = name;
	}
}
class Vip extends Customer1{
    
    
	String name;//新加入一个变量name
	public Vip() {
    
    }
	public Vip(String name) {
    
    
		super(name);
	}
	public void shopping() {
    
    
		System.out.println(this.name + "正在购物!");
		System.out.println(super.name + "正在购物!");
		System.out.println(name + "正在购物!");
	}
}

在这里插入图片描述

在这里插入图片描述

总结:父中有,子中有,在子中访问父,则super.不能省。

四.子类调用父类

public class SuperTest04 {
    
    
    public static void main(String[] args) {
    
    
    	Vip v = new Vip("张三");
    	v.shopping();
    }
}
class Customer1{
    
    
	String name;
	public Customer1() {
    
    }
	public Customer1(String name) {
    
    
		super();
		this.name = name;
	}
	public void move() {
    
    
		System.out.println("执行move");
	}
}
class Vip extends Customer1{
    
    
	String name;
	public Vip() {
    
    }
	public Vip(String name) {
    
    
		super(name);
	}
	public void shopping() {
    
    
		System.out.println(this.name + "正在购物!");
		System.out.println(super.name + "正在购物!");
		System.out.println(name + "正在购物!");
		super.move();
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45965358/article/details/113890873