我想了解将父对象引用设置为子对象的用例。示例:Dog类扩展了Animal类。(请注意,没有接口)我通常会创建一个Dog对象,如下所示:
Dog obj = new Dog();
现在,因为Dog是动物的一个子类,它已经可以访问动物的所有方法和变量。那么,这有什么区别:
Animal obj = new Dog();
请提供一个适当的用例及其使用的代码片段。请不要写关于“多态性”或“接口编码”的理论文章!
代码:
public class Polymorphism {
public static void main(String[] args){
Animal obj1 = new Dog();
Dog obj2 = new Dog();
obj1.shout(); //output is bark..
obj2.shout(); //output is bark..
}
}
class Animal{
public void shout(){
System.out.println("Parent animal's shout");
}
}
class Dog extends Animal{
public void shout(){
System.out.println("bark..");
}
}
class Lion extends Animal{
public void shout(){
System.out.println("roar..");
}
}
class Horse extends Animal{
public void shout(){
System.out.println("neigh");
}
}
两种情况下的输出相同。那么为什么我们要将父引用设置为子对象呢?
一般来说,你会知道java铸造/oop的概念。
Dog
是Animal
的一种类型,因此您可以将其分配给动物。
但是您不能将动物
分配给狗
。因为它可以是任何其他动物,比如猫。如果您确定对象是狗
,则可以将其铸造到动物
。如果动物
属于狗
类型,则您无法对山羊
进行魔法施放。
这是一项原则的实施-
程序到接口,而不是实现。
例如,如果您设计了一个方法来接受Animal
类型的引用,那么将来您可以轻松地将=Cat
实现传递给它(当然前提是Cat
是Animal
的子类型)。
也就是说-
public void doSomethingWithAnimal(Animal animal) {
// perform some action with/on animal
}
比以前灵活得多-
public void doSomethingWithAnimal(Dog d) {
// your code
}
因为对于第一种方法,您可以轻松地执行以下操作-
doSomethingWithAnimal(new Cat());
如果您决定创建新的Cat
类型,则从动物
继承。
让我编码一些时间。
List<String> list = new ArrayList<String>;
list.doThis();
list.doThat();
等等,我疯了。我想使用LinkedList
而不是ArrayList
List<String> list = new LinkedList<String>;
list.doThis();
list.doThat();
是的,我只需要更改申报部分。不需要触摸我所有的代码。多亏了对接口和超级类的编程。
我在问一个很简单的问题,但我有点困惑。 假设我有一个类: 并具有另一个类: 最后是我的Main.java类 如果我将子对象创建为 则对象可以访问变量。 我的问题是: 仅提供父类的变量的访问权限。那么这条线的确切用途是什么?? 并且当它使用动态多态性时,那么为什么在这样做之后,child类的变量是不可访问的
考虑类家长: 和类儿童: 如果我在应用程序中创建一个新的子对象,并将其放入父对象的children字段中,然后持久化父对象,为什么Hibernate不自动更新子对象的Parent字段(以便设置parentID列)?
问题内容: 我知道弱引用是垃圾收集器的摆布,我们不能保证弱引用会存在。我认为没有必要提供较弱的参考,但可以确定应该有一个理由。 为什么我们需要Java中的弱引用? Java中弱引用的实际(某些)用法是什么?如果您可以分享您在项目中的使用方式,那就太好了! 问题答案: 使用弱哈希图实际上通常是一个坏主意。首先,很容易出错,但更糟糕的是,它通常用于实现某种缓存。 这意味着以下内容:您的程序在一段时间内
问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但
我刚刚安装了Ubuntu desktop 12.04并通过以下方式安装了Java 6 JDK: 但是当我转到时,我没有看到一个名为的目录,所以我认为它根本不存在!?! 当我转到时,我看到: 我现在正试图将作为环境变量添加到中,以便从基于shell的Ant构建中访问它: ? ? 还有别的吗? 我所说的“”是指我在系统上安装的JDK6的顶级目录,无论它在哪里······
以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?