Servlet---this VS super

this : 当前运行类的实例对象

super: 父类的运行对象

依据:

所以p所代表的是函数被复写后(多态的意义)的一个Parents类,

而Parents类原来有的成员变量(不是成员函数不可能被复写)没有任何变化--------获得结论:A:成员变量:编译和运行都看Parents。

但是p的Parents类函数被复写了。--------------获得结论:B:非静态方法:编译看Parents,运行看Son

对于静态方法:编译和运行都看Parents!!


例如:定义两个类,一个是父类(parents),一个子类(Son),子类继承父类

情况一:

父类:

package thiscase;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Parents {
	public void init() {
		// TODO Auto-generated method stub
		System.out.print("1 init--parents");
	}
	
	public void demo(){
		System.out.print("2 demo parents");
		
	}
}
子类

package thiscase;

public class Son extends Parents {
	public void init(){
		System.out.print("3 init---son");
		
	}

	public void demo(){
		System.out.print("4 demo son");
		
	}
	public static void main(String[] args){
		Son son = new Son();
		son.init();
	}
}

当前运行结果:  3 init---son

解释:Son.init()-->直接调用子类函数, 输出结果。


情况二:

父类:不变

package thiscase;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Parents {
	public void init() {
		// TODO Auto-generated method stub
		System.out.print("1 init--parents");
	}
	
	public void demo(){
		System.out.print("2 demo parents");
		
	}
}
子类 : 加上super. init();

package thiscase;

public class Son extends Parents {
	public void init(){
		super.init();
		System.out.print("3 init---son");
		
	}

	public void demo(){
		System.out.print("4 demo son");
		
	}
	public static void main(String[] args){
		Son son = new Son();
		son.init();
	}
}

当前运行结果: 1 init ---parents  3 init---son

解释:Son.init()-->直接调用子类函数, super.init() + 3

super.init()----> 输出 1 ====>结果为1, 3 

情况三:

父类:加上this.demo();

package thiscase;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Parents {
	public void init() {
		// TODO Auto-generated method stub
		System.out.print("1 init--parents");
		this.demo();
	}
	
	public void demo(){
		System.out.print("2 demo parents");
		
	}
}


子类 : 同情况2 

package thiscase;

public class Son extends Parents {
	public void init(){
		super.init();
		System.out.print("3 init---son");
		
	}

	public void demo(){
		System.out.print("4 demo son");
		
	}
	public static void main(String[] args){
		Son son = new Son();
		son.init();
	}
}


当前运行结果:1 init ---parents   4 demo  son    3 init---son

解释:Son.init()-->直接调用子类函数,super.init() + 3

* super.init()----> 输出 1 + this.demo()

* * this. demo() :demo为成员函数,Son类继承了Parents的方法,并且复写了demo方法, 此时的this为Son, 结果为Son.demo()---->4 

结果为 1  4   3 



情况四:

父类:同情况三

package thiscase;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Parents {
	public void init() {
		// TODO Auto-generated method stub
		System.out.print("1 init--parents");
		this.demo();
	}
	
	public void demo(){
		System.out.print("2 demo parents");
		
	}
}

子类 :加上this. demo();

package thiscase;

public class Son extends Parents {
	public void init(){
		super.init();
		System.out.print("3 init---son");
		this.demo();
		
	}

	public void demo(){
		System.out.print("4 demo son");
		
	}
	public static void main(String[] args){
		Son son = new Son();
		son.init();
	}
}


当前运行结果: 1 init ---parents    4 demo  son    3 init---son   4 demo  son  

解释:Son.init()-->直接调用子类函数,super.init() + 3+ this.demo

* super.init()----> 输出 1 + this.demo() 

* * this. demo() :demo为成员函数,Son类继承了Parents的方法,并且复写了demo方法, 此时的this为Son, 结果为Son.demo()---->4 

结果为 1  4   3  4 



特殊情况:

父类:

public class Parents {

	public String name="Tom";

	public void init(){
		System.out.print(this.name);
	}
}

子类

package thiscase;

public class Son extends Parents {
	
	public String name="Jack";
	
	public void init(){
		super.init();
		System.out.print(this.name);
	}

	public static void main(String[] args){
		Son son = new Son();
		son.init();
		
	}

}


此时的运行结果为: Tom       Jack

解释:

son. init ()-->调用Son.Init()方法-->super. init() + this. name 

* super.init ()---->调用parents的init方法---> this. name. 由于name为成员变量,所以直接得到父类成员变量的值, this=Patents ---->结果为Tom

* this. name: 此时的this为son ,输出结果为 Jack


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值