java里super指向的是父类的实例,this指向的是当前的实例对象。public class Test extends Date {
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
// System.out.println(getClass().getSuperclass().getName());
}
}我上面的程序打印出来的结果为什么是cn.com.Test.Test,而不是父类的名字。我知道Object中getClass()方法是final的。也就是不能继承重写的。可是出来的结果为什么是当前类的类名求解。
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
// System.out.println(getClass().getSuperclass().getName());
}
}我上面的程序打印出来的结果为什么是cn.com.Test.Test,而不是父类的名字。我知道Object中getClass()方法是final的。也就是不能继承重写的。可是出来的结果为什么是当前类的类名求解。
this、和super的区别是:
this super
属性访问: 调用本类中的属性,如果本 访问父类中的属性
类中没有此属性则在父类中继续
查找。
方法: 访问本类中的方法,如果本类 直接访问父类中的方法
中没有此方法,则在父类中继续查找调用构造: 调用本类构造方法,必须放在构造 调用父类构造、必须放在子类构造方法的首行
方法首行特殊: 表示当前对象 无此概念
this是本类的属性,方法等。
就这样
public void test(){
System.out.println(this.getClass());
System.out.println(super.getClass());
}
输出的结果都是当前实体类Test
System.out.println(super.getClass());调用父类Date类中的getclass()方法,Date类Object的子类,Date中的getClass()是Object中的,运行时期的实例是Test类,所以输出的依然是Class Test
System.out.println(this.getClass()); //调用Test类中的getclass()方法,此方法从Date继承的,Date从Object继承的,运行时期的实例是Test类,所以输出的是Class Test
public final native Class<?> getClass();也就是说,所有类的getClass()都是一样的,返回值是调用getClass()方法对象实例的类型。具体实现代码不是java的,不知道sun给藏哪儿了。
举例:你定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();
使用this关键字引用成员变量。
使用this关键字在自身构造方法内部引用其他构造方法。
使用this关键字代表自身类的对象。
使用this关键字引用成员方法 super
在子类的构造方法内部引用父类的构造方法。
在子类中调用父类中的成员方法。
在子类中调用父类中的成员变量。
public static void main(String[] args) {
new Test().test();
} 你子类的方法把父类的方法重写了,当然调用的是子类的方法、。