gpt4 book ai didi

初学者的Java继承

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:50:39 27 4
gpt4 key购买 nike

我正在努力研究 Java 中的继承。到目前为止,我了解到如果我以下列方式声明一个对象:Superclass object = new Subclass() 创建的子对象仅限于父对象的方法。如果我想访问 child 的其他方法,我将不得不投给 child 。但是为什么方法仍然在子类中被覆盖。

这是我的例子

public class Parent {

public Parent() {

}

public void whoAmI(){
System.out.println("I'm a parent");
}

}
public class Child extends Parent {

public Child() {

}

public void whoAmI(){
System.out.println("I'm a child");
}

public void childMethode() {
System.out.println("Foo");

}
}

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

List<Parent> list = new ArrayList<>();

Child c = new Child();
Parent p = new Parent();
Parent pc = new Child();

c.whoAmI();
p.whoAmI();
pc.whoAmI();

// Access child methodess
((Child) pc).childMethode();

list.add(c);
list.add(p);
list.add(pc);

System.out.println(list.size());

}

}

pc.whoAmI() 打印“我是 child ”。为什么不打印“我是 parent ”?

最佳答案

为避免混淆,请务必了解您创建的子类对象始终包含所有方法。向下转型是一个空操作;您只需将同一个对象视为子类型的实例。

推论:您永远无法通过向下转型来改变对象的行为。这直接导致您始终访问相同的重写方法,而不是来自父类(super class)的方法。

这种行为允许您用不同的行为替换同一个声明的父类(super class)型。它称为多态性,是 Java 编程和一般 OOP 的主力。没有它,一开始就有一个类层次结构是没有意义的。至少,它的用处会小得多。

关于初学者的Java继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com