下面是很代码
class A
{
private String name;
A a;
A(String s)
{
this.name= s;
System.out.println("object created");
}
}class B extends A
{
B(String s)
{
super(s);
this.a= this;
}
}public class Main {
public static void main(String[] args) {
B b= new B("test");
}
}
在B的构造函数中a分明是属于A类,为什么可以把属于B类的this赋值给a,不是类型不匹配吗,但程序运行没有问题,请哪位高手帮我解释一下,非常感谢
class A
{
private String name;
A a;
A(String s)
{
this.name= s;
System.out.println("object created");
}
}class B extends A
{
B(String s)
{
super(s);
this.a= this;
}
}public class Main {
public static void main(String[] args) {
B b= new B("test");
}
}
在B的构造函数中a分明是属于A类,为什么可以把属于B类的this赋值给a,不是类型不匹配吗,但程序运行没有问题,请哪位高手帮我解释一下,非常感谢
静态绑定:变量和静态方法。
动态绑定:实例方法。
这里:private String name;
A a;
可见name在子类中无法访问。
a为默认访问权限,在同个包下都可以访问。
B类继承A类之后,
this.a= this;
这句代码:可以理解为
B.a=B;
因为B继承自A,a又为A类型,所以可以这么写
this.a = this,这时把子类对象的首地址赋值给父类引用变量。 父类名 引用变量名 = new 子构造名();这句话用处很广,继承中、以及以后要学的抽象类、接口都得这样。
1. 子类包括了父类中的所有成员,而且a 变量非private,所以this.a成立。
2. 父类的引用变量可以被所有从父类派生的子类的引用赋值。所以属于B类的this可以赋值给a.