我已经开始学习Java了,朋友问我这个问题,
之间有什么区别
ParentClass p = new ChildClass();
和
ChildClass c = new ChildClass();
提前致谢。
答案 0 :(得分:3)
p
只会在ParentClass
中定义可访问的方法,只要它不会被转换为ChildClass
的实例。
c
将使用ParentClass
中定义的可用方法以及ChildClass
中定义的方法
例如:
class ParentClass {
public void dothis() {
}
}
class ChildClass extends ParentClass {
public void doother() {
}
}
p
只能致电p.dothis()
。调用p.doother()
将导致异常,或者使程序无法编译。
c
很乐意接受c.dothis()
和c.doother()
如果你“怀疑”(编程时你无法确定没有检查)对象可能是某个子类,你可以尝试向下传播它。
在检查对象实例之前,请务必先检查
检查通过后,您可以将对象强制转换为子类。
if(p instanceof ChildClass) {
ChildClass c = (ChildClass)p;
c.doother();
}
答案 1 :(得分:1)
有两种类型的结合1)早期结合2)晚期结合 绑定意味着编译器使指定的过程调用失效。 方法重载是早期绑定的最佳示例
虽然运行时多态性是后期绑定的最佳示例
class Parent{
public void test()
{
System.out.println("a");
}
}
class Child extends Parent{
int a=100;
public void test()
{
System.out.println("b");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent a =new Parent();
a.test();
Parent b=new Child();
b.test();
}
}
以上示例可能会清除您的概念