黑马程序员----【javaSE基础】个人总结--this和super
2013-07-08 13:06
344 查看
------- android培训、java培训、期待与您交流! ----------
this:它存放的值就是此对象实例的“引用”(地址),也就是“new 此类构造函数”返回
super:引用该对象实例内的父类对象
super(参数) :调用父类的构造函数,此种用法中的super关键字可代表此类
从用途来看,主要有2种情况:
(1)用于构造函数内,以指定要调用父类的某个构造函数
练习代码
(2) 指定使用继承而来的某成员,而非使用此类改写的成员
------- 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培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员----【javaSE基础】个人总结--异常和包
- 黑马程序员--03.面向对象--04.子类构造必须访问父类构造的原因 this_super语句的含义【个人总结】
- 黑马程序员----【javaSE基础】个人总结--static
- 黑马程序员----【javaSE基础】个人总结--代码块
- 黑马程序员:Java基础总结----this的用法(super)
- 黑马程序员----【javaSE基础】个人整理--static总结
- 黑马程序员----【javaSE基础】个人总结--eclipse常用快捷键
- 黑马程序员----【javaSE基础】个人总结--String 、 StringBuffer 和 StringBuilder
- 黑马程序员_JavaSe基础知识总结六:super、final关键字
- 黑马程序员----【javaSE基础】个人总结--abstract class和interface的区别
- 黑马程序员----【javaSE基础】个人总结--常识复习
- 黑马程序员_JavaSE基础知识总结七:new、this、static关键字和单例模式初步
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- 黑马程序员_Java基础_this,super,static,final关键字
- 2.23 Java基础总结 ①toString方法②equals③this和super④final⑤常量
- 黑马程序员--Java基础加强--07.【反射创建对象 操作字段 调用方法的异同】【个人总结】
- 黑马程序员_JavaSE基础知识总结五:类与对象的区分及封装特性
- 黑马程序员--02.Java语言基础--03.堆内存和栈内存的区别【个人总结】
- 黑马程序员——Java基础---面向对象代码块和继承和this和super和重写和重载和final
- 黑马程序员_JavaSE基础知识总结十五:反射