黑马程序员----【javaSE基础】个人总结--this和super

------- android培训java培训、期待与您交流! ----------

this:它存放的值就是此对象实例的“引用”(地址),也就是“new  此类构造函数”返回
          的这个“引用值”。也就是用来引用此对象实例本身。
this(参数) :调用此类的构造函数,此种用法中的this关键字可代表此类
从用途来看,主要有3种情况:
(1)取得此对象实例本身的“引用值”
(2)在函数内指称“成员变量”,以区别于同名的“局部变量”
(3)用于构造函数内,以调用此类内其他的构造函数
练习代码

import java.lang.*;

class a13
{	
	public static void main(String[] para)
  {
		System.out.println("========= test obj1 =========");  	
		myClass obj1 = new myClass();
		System.out.println("obj1.getThis() = " + obj1.getThis());		
		obj1.showABC();
		System.out.println("========= test obj2 =========");
		myClass obj2 = new myClass(2,78,'C');				
		obj2.showABC();
		System.out.println("========= test obj3 =========");
		myClass obj3 = new myClass(3,26,'E',true);				
		obj3.showABC();	
  }
}
class myClass
{ 
	public final myClass myThis  = this;  //引用此对象实例本身
	
			
	public int a;
	public float b;
	public  char c;  
	
	public myClass getThis()
	{
		return this;
	}
	
	public myClass()
	{
		a = 1;
		b = 60;
		c = 'D';
		System.out.println("this = " + this);
		System.out.println("myThis = " + myThis);			
	
	}
	
	public myClass(int a,float b,char c)
	{
		this();  //在这个构造函数调用上一个构造函数内容
		this.a = a;
		this.b = b;
		this.c = c; 
	}
	
	public myClass(int a,float b,char c,boolean revise)
	{
		this();
		this.a = a;
		this.c = c;
		if(revise)
			this.b = this.b * 70/100 + 30;  //注意此处b的值是60
		else	
			this.b = b;			
	}	

	public void showABC()
	{
		System.out.println("a = " + a + "  b = " + b + "  c = " + c );
	}			
}




super:引用该对象实例内的父类对象
super(参数) :调用父类的构造函数,此种用法中的super关键字可代表此类
从用途来看,主要有2种情况:
(1)用于构造函数内,以指定要调用父类的某个构造函数
练习代码
import java.lang.*;

class a14
{	
  public static void main(String[] para)
  {
    Cc obj1 = new Cc();
    System.out.println("obj1.Var1 = " + obj1.Var1);
    System.out.println("obj1.Var2 = " + obj1.Var2);
    System.out.println("obj1.Var3 = " + obj1.Var3);
    System.out.println("========================"); 	 	
    Cc obj2 = new Cc(10000);
    System.out.println("obj2.Var1 = " + obj2.Var1);
    System.out.println("obj2.Var2 = " + obj2.Var2);
    System.out.println("obj2.Var3 = " + obj2.Var3);
    System.out.println("========================");   	
    Cc obj3 = new Cc(555,12);
    System.out.println("obj3.Var1 = " + obj3.Var1);
    System.out.println("obj3.Var2 = " + obj3.Var2);
    System.out.println("obj3.Var3 = " + obj3.Var3);    

  }
}

class AaA
{
  int Var1;
  
  public AaA(int var1)
  {  
    //自动调用 super(),也就是 Object() 
    System.out.println("start in A(int var1) Var1 = " + Var1); 
      //可取 Var1 之值,证实在此之前 Var1 已自动初始化(为0) 
    Var1 = var1;
    System.out.println("执行 public A(int var1)");
  } 
   
  public AaA()
  {  
    //自动调用 super(),也就是 Object()  
    System.out.println("start in A() Var1 = " + Var1); 
      //可取 Var1 之值,证实在此之前 Var1 已自动初始化(为0)
    Var1 = 10;
    System.out.println("执行 public A()");
  } 
}

class Bb extends AaA
{
  int Var2;
  
  public Bb()
  {
    //自动调用 super(),A 必须要有 A() 预设构造子
    Var2 = 10;
    System.out.println("执行 public B()");
  } 
   
  public Bb(int var1)
  {
    super(var1);  //若不指定调用,则会自动调用父类的 A()
    Var2 = Var1 * 2;   // 到此行 Var1 之值已初始化
    System.out.println("执行 public B(int var1)");
  }
  

}

class Cc extends Bb
{
  int Var3;  
  
  public Cc()
  {
    //自动调用 super(),B 必须要有 B() 预设构造子
    Var3 = 10;
    System.out.println("执行 public C()");
  }
    
  public Cc(int var1)
  {
    super(var1); //若不指定调用,则会自动调用父类的 B()
    Var3 = Var2 * 2;  // 到此行 Var2 之值已初始化
    System.out.println("执行 public C(int var1)");			
  }
  
  public Cc(int var3,int multi)
  {
    //不指定调用,自动调用 super(),即  B 类的 B()
    Var3 = var3*multi;
    System.out.println("执行 public C(double var3,int multi)");			
  }
}

(2) 指定使用继承而来的某成员,而非使用此类改写的成员
import java.lang.*;

class a15
{	
  public static void main(String[] para)
  {		   	
    B obj1 = new B();
    System.out.println("======= B 类之 super ======="); 
    obj1.showBSuper();  //B 定义之方法中 super ==> A 
    System.out.println("======= B 类之 this ======="); 
    obj1.showBThis();   //B 定义之方法中 this ==> B
    		 		
    C obj2 = new C();  	
    System.out.println("======= C 类之 super ======="); 
    obj2.showCSuper();  // C 定义之方法中 super ==> B	 	
    System.out.println("======= C 类之 this =======");  	
    obj2.showCThis();   // C 定义之方法中 this ==> C   
    
     	
  
  }
}

class A1
{
	public int Var1 = 1000;
	public int Var2 = 2000;
	public int Var3 = 3000;
	
	public void Fun1()
	{
		System.out.println("AAAA ==== Fun1() in A class");
	}
	
	public void Fun2()
	{
		System.out.println("AAAA ==== Fun2() in A class");
	}	
}

class B extends A1
{	
	public float Var2 = 22.22F;  //Hide 继承来的 Var2
	public float Var3 = 33.33F;  //Hide 继承来的 Var3
	public float Var4 = super.Var2 + 400;  //新增,仅为示范而作,尽量将初始化写于构造子之内;
	public float Var5 = super.Var2 + 500;  //新增,super ==> A

	public void Fun2()
	{
		System.out.println("BBBB ==== Fun2() in B class");
	}	
	
	public void showBThis()
	{
		System.out.println("Var1 = " + Var1
		                   + "  Var2 = " + Var2
		                   + "  Var3 = " + Var3);
		Fun1();
		Fun2();	
	}
	
	public void showBSuper()
	{
		System.out.println("super.Var1 = " + super.Var1
		                    + "  super.Var2 = " + super.Var2
		                    + "  super.Var3 = " + super.Var3);
		super.Fun1();
		super.Fun2();	
	}
	

}

class C extends B
{

	
	public String Var2 = "AAAA";  //Hide 继承来的 Var2
	public String Var4 = "BBBB";  //Hide 继承来的 Var4
	
	public void Fun1()
	{
		System.out.println("CCCC ==== Fun1() in C class");
	}
	
	public void showCThis()
	{
		System.out.println("Var1 = " + Var1
		                    + "  Var2 = " + Var2
		                    + "  Var3 = " + Var3
		                    + "  Var4 = " + Var4
		                    + "  Var5 = " + Var5);		
		Fun1();
		Fun2();
	}
	
	public void showCSuper()
	{
		System.out.println("super.Var1 = " + super.Var1
		                    + "  super.Var2 = " + super.Var2
		                    + "  super.Var3 = " + super.Var3
		                    + "  super.Var4 = " + super.Var4
		                    + "  super.Var5 = " + super.Var5);
		super.Fun1();
		super.Fun2();		
	}
}





------- android培训java培训、期待与您交流! ----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值