我有两个具有以下结构的A和B类
Class A() {
Integer a1;
Integer a2;
}
Class B() extends A {
Integer b1;
}
如何从A类对象中设置(所有)B类变量a1和a2(它们也可以超过2)?
答案 0 :(得分:1)
Class A {
protected Integer a1;
protected Integer a2;
}
Class B extends A {
Integer b1;
}
你可以这样做:
B b = new B();
b.a1 = 3;
b.a2 = 4;
答案 1 :(得分:1)
让我们在下面的案例中看到这一点(假设A和B都在同一个版本中)
案例1:
A aReference = new A()
aReference.a1 = 1;
aReference.a2 = 2;
b1 is not present in the object so can not be set.
案例2:
A aReference = new B(); //reference of parent class and object of child class.
aReference.a1 = 10;
aReference.a2 = 20;
b1存在于对象中但不能直接访问,因此需要进行类型转换。
((B)aReference).b1 = 30;
案例3:
B bReference = new B();
bReference.a1 = 10;
bReference.a2 = 20;
bReference.b1 = 30;
案例4:
Suppose you want to modify it from inside a method of B
class B extends A{
....
public void someMethod(){
super.a1 = 10;
super.a2 = 20;
b1 = 40;
}
}
案例5:
If you want to modify the values of the state of child from parent class
public class A{
public void someMethod(){
((B)this).b1 = 10;
a1 = 20;
a2 = 30;
}
}
**第5点是非常糟糕的做法。父类不得知道子类。 ***您应该使用setter方法修改状态并将状态保持为私有
答案 2 :(得分:0)
由于op要求使用父对象引用设置子类变量。你可以试试这个。
代码示例:
class A {
Integer a1=5;
Integer a2=6;
}
class B extends A {
}
public class Inherit {
public static void main(String[] args) {
A obj = new B(); //casting
A obj2=new A();
obj.a1 = 10;
obj.a2 = 12;
System.out.println("value of a1 in class A :"+obj2.a1+" & value of a2 in class A :"+obj2.a2);
System.out.println("value of a1 in class B :"+obj.a1+" & value of a2 in class B :"+obj.a2);
}
}
这里我们将子类对象转换为父引用,并使用引用来更改变量数据。
答案 3 :(得分:-1)
如果您想从父访问孩子,答案很简单:您不能。父类可能有多个子类,因此您必须创建一个引用,因为A没有B的变量,它是B从A继承变量。
相反,您可以实例化该类并将其作为普通类访问。
B b = new B();
b.b1 = 1;
如果您的意思是从子级访问父级,则可以使用super关键字调用超类:
super.a1 = 3; // must execute from B class
由于java不允许多父母,因此不能与其他任何人分享超类。