public class TestThis {
public TestThis() {
System.out.println(super);//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
//以上程序不能正常运行public class TestThis {
public TestThis() {
System.out.println(super.toString());//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
//此程序能正常运行 但结果是
TestThis@de6ced
TestThis@de6ced//一样的
对于这两个隐式变量
我一直认为this是当前对象的引用 super是 父类对象的引用 但从结果来看 和我所想的不一样
public TestThis() {
System.out.println(super);//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
//以上程序不能正常运行public class TestThis {
public TestThis() {
System.out.println(super.toString());//奇怪 这怎么会不行呢
System.out.println(this);
}
public static void main(String[] a) {
new TestThis();
}}
//此程序能正常运行 但结果是
TestThis@de6ced
TestThis@de6ced//一样的
对于这两个隐式变量
我一直认为this是当前对象的引用 super是 父类对象的引用 但从结果来看 和我所想的不一样
=============
这倒底行还是不行???
public class Main { public Main() {
System.out.println(super.toString());
System.out.println(this);
} @Override
public String toString() {
return "Hello World";
} public static void main(String[] a) {
new Main();
}
}
继承用的
toString()是可以理解成main的内置类(这样说不正确,暂时这样理解吧)
如果想改变main 输出对象,可以重写toString()public String toString()
{
return "aa";
}main 执行自动调用
相同点:
this.XXX
super.XXX
XXX为属性或方法
不同点:
super(XXX)或super()调用父类有参或无参数的构造方法。即使在子类中没写super()
java也会默认执行super()调用父类的构造方法。所以我觉得在产生子类对象的同时
也产生了父类的对象而且父类对象的地址与子类是相同的也就是说父类对象确实存在
而子类对象是在父类对象的基础上产生的一个新对象你可以把子类和父类分别写在两个.java文件中,分别在构造方法中写上System.out.println(this)
你会发现在产生子类对象的时候,也会调用父类构造方法,说明产生了父类对象,而地址也是相同的。但你在父类中单独写个main方法产生父类对象,得到的地址就是不同的了。