一.程序内存分析
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();
}
}