作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有 3 节课:
Animal
Dog
继承 Animal
Cat
继承了 Animal
现在如果我这样做:Animal a = new Dog();
a
指向的对象 Dog
是否会转换为 Animal
?
如果是,那么这会将变量和对象都转换为狗吗?
((Dog)a).bark(); // bark() is specific for the Dog
在 Java 中转换这些引用类型的规则是什么?
最佳答案
我将尝试描述背景中发生的事情,希望它能澄清一些事情。让我们把这个声明和定义分成几个部分。
当查看“a”时,您正在使用“动物”视角,因此您无法使用仅由动物子类声明的任何方法(或字段)。为了“获得”这种观点,你可以像以前一样从动物转向狗。请记住,向下转换并不安全,而向上转换则安全。
例如:
Animal a = new Cat(); // cats can mew
Animal b = new Dog(); // dogs can bark
(Dog)b.bark() // Unsafe but compiles and works.
(Dog)a.bark() // Unsafe but compiles and throws a run time exception.
一般来说,一个好的做法是为 Animal 创建一个抽象类,然后用子类覆盖它的一些方法。例如:
public abstract class Animal {
abstract void makeNoise();
}
public class Dog extends Animal {
void makeNoise(){
System.out.println("bark");
}
}
public class Cat extends Animal {
void makeNoise(){
System.out.println("mew");
}
}
关于java - 在Java中使用多态性时是否存在对象的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840396/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!