求教个关于java继承的问题

这题为什么选B,求详细解答,谢谢

这是一个向上转型与向下转型的问题
向上转型: 通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口
向下转型:与向上转型相反,即是把父类对象转为子类对象。
上面的4组答案,
A,实现类的子类向上转型,没问题;
B,Beta是Delta父类,父类转成子类,是向下转型,出问题;
C,同A一样,向上转型;
D,子类向父类转,向上转型;

一、向上转型与向下转型。
对象类型的转换在Java语言平台中经常遇到,主要包 括向上转型与向下转型操作。程序开发人员需要熟练掌握这两个转型的方法以及其中容易出错的地方。如何来了解这两个转型的区别呢?笔者认为,以一个现实的例 子作为比喻,可能会更加的容易理解。
如现在有动物、鸟类、燕子三个名词,他们之间有什么关系呢?通常我们都会说,燕子是特殊的鸟类,或者说燕子是鸟类的一种。为此,从对象的定义来 看,鸟类就是一个父类,而燕子就是一个子类。或者说,燕子对象就是一个鸟类对象。笔者这里要强调的一点就是,由于燕子是鸟类的一个对象,所以鸟类所具有的 特性燕子全部具有。而燕子所具有的特性(如迁徙)则鸟类不一定都具有。在这个例子中,燕子也是一种鸟类。为此可以将燕子的对象堪称是一个鸟类的对象。这种 方法在Java语言环境中就叫做“向上转型”。从这个例子中可以看出,向上转型是一个从较抽象类型的类(鸟类)向比较 具体的类(燕子)过度。由于具体类(燕子)具有抽象类(鸟类)的全部特性,所以在这个转换过程中是不会有问题的。这就好像一个逻辑判断题说燕子是鸟类的一 种,其具有鸟类的全部特性。这个命题至少到现在为止是完全正确的。
但是,在实际工作中,我们还经常会遇到向下转型的情况。也就是说从一个抽象类中(鸟类)引用具体类(燕子)中的对象。也就是说,我们可以说燕子 是鸟类的一种。但是现在反过来,如果说鸟类就是燕子,那显然就是以偏概全了,因为燕子并不具有其他鸟类的特性。如鸽子的特性燕子就没有。所以,在应用程序 开发中,如果将父类对象赋值给子类的对象,就可能有问题。如果硬要这么做的话,则很有可能发生编译器错误。因为父类对象并不一定是子类的实例。这是什么意 思呢?即所说的鸟类(父类对象)并不一定是子类对象(燕子)。因为鸟类对象还有可能是鸽子、白鹭等等。所以,如果将父类对象给子类对象的话,那么就会出现 问题。
二、如何实现向下转型?
由于向上转型一般都是安全的,即将一个子类对象直 接赋值给父类对象,一般被认为是安全的,如燕子是鸟类在哪里 都是成立的。所以在向上转型时不需要采用其他的关键字,我们常常把向上转换叫做隐式转换。但是在这里向下转换是一种不安全的转换方式,如说鸟类就是燕子, 这种说法无论在哪里都说不过去。为此默认情况下,进行向下转型时,往往会发生编译器错误。
温馨提示:内容为网友见解,仅供参考
无其他回答

求教个关于java继承的问题
为此可以将燕子的对象堪称是一个鸟类的对象。这种 方法在Java语言环境中就叫做“向上转型”。从这个例子中可以看出,向上转型是一个从较抽象类型的类(鸟类)向比较 具体的类(燕子)过度。由于具体类(燕子)具有抽象类(鸟类)的全部特性,所以在这个转换过程中是不会有问题的。这就好像一个逻辑判断题说燕子...

Java A b = new B(); B继承A 。
A b=new B():因为B类是A类的子类,所以上面语句发生了向上转型. new B()会在堆内存中产生一个B类的实例,A b会在栈内存中产生一个A类的引用.A b = new B()会让b指向堆内存中的new B()实例,但是该实例时B类的实例,这是就会发生向上转型.如果子类中存在和父类相同名称和参数的方法,这种...

java问题 ~~求教高手 13) 以下关于异常的说法,错误的是
error 是错误 , 这个错误是由于java虚拟机引起的 是程序员无法通过更改代码解决的,所以这种错误我们不需要抛出异常 Exception 这就是我们所说的异常 我们知道 java 分为2步 第一 编译 如果编译没有通过,那叫做 语法错误 编译通过 而在第二步运行的时候产生的错误(此错误不是上面说的error)...

java swing 的几个问题,求教
总共两个文件,第一个是启动文件,第二个是一个基础面板类,可以运行。已经帮你排好版面了,只是未有添加事件响应,你研究一下自己添加吧package com;import com.ren.BasePanel;import javax.swing.*;import java.awt.BorderLayout;import java.awt.Toolkit;public class SwingTest extends JFrame { public static void...

关于JAVA的线程问题,notify() 出现java.lang.IllegalMonitorStateException...
简单来说,wait()和notify()方法只能在synchronized锁住的那个对象上调用 你锁定的是obj对象,所以你要写成obj.wait()以及obj.notify()直接notify()相当于this.notify(),也就是在本对象上调用,所以就错了。

JAVA,求教大佬,不用写出完整程序,大概思路就可以
首先我说一下Vector,Vector本身已经很少使用了,它虽然是线程安全的,但是性能不如ArrayList,其操作方式也与ArrayList基本类似,另外说一下栈Stack继承了Vector,你也可以考虑一下使用栈。1、打印就不说了,对象序列化后遍历向量打印输出,遍历可以使用jdk1.8的lambda表达式所支持的forEach()方法:2、新增...

java新手求教
运行JVM字节码的工作是由解释器( java命令 )来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类...

JAVA 学习方法或捷径--求教
《Thinking in Java》讲述了Java语言的方方面面,很多Java语言的老手都评价“这是一本将Java语言讲得相当丑陋的书”。该书谈及了java语言的很多细节,每一个方面都是相当深刻的。通过本书你可以看到“丑陋的”java语言。 网络上关于java语言讲解的视频很多很多,其中不凡有垃圾。《翁恺—JAVA语言》可能是你学习java...

JAVA 编程题求教
import java.awt.*;import javax.swing.*;public class List1 extends JFrame implements ActionListener { private JLabel lstName;private JTextField txfName;private JTextArea txaName;private JButton btnClose;public List1(){ lstName = new JLabel("请输入你的姓名:");txfName = new ...

java后台问题,新手求教
简单点基础性的可以理解为一个表对应一个service,一个service对应一个DAO,一个DAO对应一个DAOImp。不过server属于业务逻辑层~根据业务的不同所调用的DAO也会不一样~比如一个学生的service,可以只对应一个学生的DAO,也有可能会用到班级的DAO,学校的DAO等~...

相似回答