概念
this指代当前对象,持有当前对象的地址
作用
解决二义性
作为参数传递
作为返回值
-
构造方法之间的相互调用
public class _04ThisDemo { public static void main(String[] args){ Teacher t=new Teacher(); //作为参数传递 t.test1(); //作为返回值 System.out.println(t.test3()); //构造方法之间的相互调用 Teacher t1=new Teacher("小名",5); System.out.println(t1.getName()); } } class Teacher { private String name; private int age; Teacher(String name,int age){ this(name); this.age=age; } Teacher(String name){ System.out.println("我是从上面下来的"); this.name=name; } //Teacher(){ // this("小莫",32); //} Teacher(){ //this作为参数传递 void test1(){ System.out.println(this); test2(this); } void test2(Teacher t){ System.out.println(t+"我被传递了"); } //this 作为返回值 Teacher test3(){ return this; } }
super
概念
在子类中表示父类的对象
使用
访问父类的普通属性 super.name
调用父类的普通方法 super.run()
-
构造方法
子类的构造方法一定会调用到父类的构造方法
- 子类的构造方法含有一个隐式的父类无参构造方法 super();
- 如果调用了父类的有参构造方法,隐式的将不复存在 super("小明");
class _02SuperTest {
public static void main(String[] args){
System.out.println("Hello World!");
B b1=new B();
//打印两句 父类 无参和子类无参
B b2=new B("小明");
//打印两句 父类有参和子类有参
B b3=new B("小明",20);
//打印两句 父类无参和子类两个参
}
}
class A{
String name;
A(){
System.out.println("我是父类的无参构造方法");
}
A(String name){
System.out.println("我是父类的有参构造方法");
}
}
class B extends A{
//子类在创建对象的时候,会隐式调用父类中的无参构造方法
//如果有显式调用父类的构造方法,隐式的就不复存在
int age;
B(){
System.out.println("我是子类的无参构造方法");
}
B(String name){
super("test");
System.out.println("我是子类的有参构造方法");
}
B(String name,int age){
System.out.println("我是子类的有两个参的构造方法");
}
}