- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在理解 Java 的继承方面遇到了一些困难。我知道这样的事情是可能的,但这样做的目的是什么?
动物pig0 = new Pig();
这里发生了什么?如果有人想在这个例子中创建一个新的 Pig 对象,为什么不这样做呢?
Pig pig0 = new Pig();
或者如果他们想要一个 Animal 对象,为什么不这样做呢?
动物pig0 = new Pig();
允许这种事情发生的目的是什么,到底发生了什么?请注意,这些示例假设 Pig
是 Animal
的子类。
谢谢。
最佳答案
因为 Pig
扩展了 Animal
,任何 Animal
引用都可以分配给 Pig
的实例。这称为多态性。
那么你为什么要这样做呢?如果您编写的代码可以处理任何 Animal
,那么您就可以为 Animal
的任何扩展重用该代码,无论 Animal
是否您正在处理的是 pig
或山羊
或大象
。
这也有助于实现信息隐藏的原则 - 在许多情况下,您要么不需要知道您是否正在处理特定的子类,要么您不想要知道知道。多态性让您可以在更抽象的层面上思考代码设计,而不是必须处理特定的 Animal
扩展。这是一个简单的示例:
static abstract class Animal{
public abstract void speak();
}
static class Pig extends Animal{
@Override public void speak(){ System.out.println("oink"); }
}
static class Goat extends Animal{
@Override public void speak(){ System.out.println("baah"); }
}
static void converse(List<Animal> list){
for(Animal a : list) System.out.println(a.speak());
}
public static void main(String[] args){
List<Animal> l = new LinkedList<Animal>();
l.add(new Pig());
l.add(new Goat());
converse(l);
}
在命令行中,您将看到以下打印内容:
oink
baah
尽管我们的 List
被定义为包含 Animal
类型的实例,但每次调用 a.speak()
时我们都会得到不同的行为因为列表中的第一项实际上是 pig
,第二项是山羊
。
此代码片段中有第二个多态性示例 - 我将把它作为练习留给您来找出它在哪里:)
关于java - 在Java中,为什么创建新对象时父类有时会在左边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25901393/
我有两个父 div,contenttop 和 contentbottom。我已将两者都设置为 width:100% 和 height:auto (我希望它们基于它们包含的 div 是流畅的)在这两个
是否有具体推荐的方法将 spring-boot 父 pom 包含到已经具有所需父 POM 的项目中? 对于需要从组织父级扩展的项目,您有什么建议(这是非常常见的,甚至许多/大多数项目都发布到 Mave
我有 3 个 div 包裹在 2 个父 div 中。所有 3 个子 div 内部都有一个 div, 分配了 height。问题是,子级 div 包装器(类名为 content 的)的高度等于最大的子级
好的,所以问题是 #page 不会跟随大小变化,我希望 #page 在我悬停 #text3 时达到 100% 高度 http://jsfiddle.net/2EfLz/38/ 最佳答案 将此添加到您的
是否有具体推荐的方法将 spring-boot 父 pom 包含到已经具有所需父 POM 的项目中? 对于需要从组织父级扩展的项目,您有什么建议(这是非常常见的,甚至许多/大多数项目都发布到 Mave
我正在尝试创建一个游戏,用户首先看到的是游戏背景之上的开始菜单模式。 基本 HTML: CSS: html, body{ min-height:100%; } .game-boa
我是一名优秀的程序员,十分优秀!