在继承的概念中,我经历了使用父类实例访问子类成员的过程,但由于引发错误而无法正常工作。我的代码如下:
package base;
public class p {
String college = "vrce";
void does() {
System.out.println("student");
}
}
public class c extends p {
String branch = "ece";
public static void main(String[] args) {
/*c o= new c();
System.out.println(o.college);
System.out.println(o.branch);
o.does();
all child and parent work*/
p o = new c(); ////c p
System.out.println(o.college);
System.out.println((o.branch));
o.does();
/* p o= new p();
System.out.println(o.college);
// System.out.println(o.branch);//child details can't
o.does();*/
}
}
如上所示,p
类是父类,c
是子类,我想以父类实例为branch
来访问子成员p o = new c();
。
如果可能,怎么可能?如果没有,那为什么不可能呢。请详细解释一下我吗?预先感谢。
答案 0 :(得分:2)
由于对父类p
的引用,因此只能访问父类定义的方法和字段。
如果您需要访问子类定义的方法和字段,则需要进行强制转换:
System.out.println((c) o.branch);
提示:p
和c
不是类的好名字。最好使用描述性词语。在此示例中,甚至Parent
和Child
也会更好。
答案 1 :(得分:0)
这将不起作用,因为类p
没有字段branch
。您可以将其转换为c
,然后从中获取分支,因为o
是c
,((c)o).branch
的实例。这将起作用,因为您知道o
是c
的实例。 (即p o= new c();
)
正如@NickJ所提到的,类名和变量应该比p
,c
更为冗长/更具描述性(类通常以大写字母开头,例如Parent
或{{1} })