第1关:学习-Java继承和多态之子类对象特点

  • 任务描述
  • 相关知识
    • 子类对象的特点
    • instanceof 运算符
  • 编程要求
  • 测试说明

任务描述

本关任务:使用 instanceof 运算符判断所指对象是否为特定类的一个实例。

相关知识

为了完成本关任务,你需要掌握:1. 子类对象的特点;2. instanceof 运算符。

子类对象的特点

在 Java 中一切都以对象的形式进行处理,在继承的机制中,创建一个子类对象,同样会创建一个父类子对象,这个对象与父类创建的对象是一样的。两者的区别在于后者来自外部,而前者来自子类对象的内部。当实例化子类对象时,父类对象相应被实例化。换句话说,在实例化子类对象时,Java 编译器会在子类的构造方法中自动调用父类的无参构造方法。

例子:

  1. class Person {
  2. // 父类无参构造方法
  3. Person() {
  4. System.out.println("调用父类的构造方法");
  5. }
  6. }
  7. // 子类继承父类
  8. class Students extends Person{
  9. // 子类无参构造方法
  10. Students() {
  11. System.out.print("调用子类的构造方法");
  12. }
  13. }
  14. class Demos{
  15. public static void main(String[] args) {
  16. // 实例化一个子类对象
  17. Students s = new Students();
  18. }
  19. }

执行结果:

  1. 调用父类的构造方法
  2. 调用子类的构造方法

我们发现实例化子类对象时,会先实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类的构造方法之前,父类已经完成实例化操作。

在实例化子类对象时,父类无参构造方法将被自动调用。有参构造方法不能被自动调用,用户只能使用 super 关键字显示地调用父类的构造方法。

当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都被分配了内存空间,但只将其中子类继承的那部分成员变量为分配给子类的变量。但为什么要将未继承的变量分配内存呢?因为,子类也许有一部分方法从父类继承,而这部分方法却可以操作继承的变量。所以我们需要。

  1. class Person {
  2. // 定义腿属性,并设置为 2
  3. private int leg = 2;
  4. int money; // 定义钱属性
  5. // 定义 action 方法,设置腿的数量为 5,并输出相关信息
  6. void action(){
  7. leg = 5;
  8. System.out.print(leg);
  9. }
  10. }
  11. // Man 类继承 Person 类
  12. class Man extends Person{
  13. int height;
  14. }
  15. class human{
  16. public static void main(String args[]){
  17. Man you = new Man(); /*这条语句的执行意味着:money,leg,height,action 都被分配了空间*/
  18. you.action(); //这条语句的执行说明了子类可以通过继承的方法来操作没继承来的变量
  19. }
  20. }

执行结果:

  1. 5

instanceof 运算符

Java 中的 instanceof 运算符是用来在运行时判断对象是否是特定类的一个实例。instanceof 通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

用法:

  1. boolean result = Object instanceof Class;

名词介绍:

  • result:布尔类型;
  • Object:必选项。任意对象表达式;
  • Class:必选项。任意已定义的对象类。 说明: 如果 Object 是 Class 的一个实例,则 instanceof 运算符返回 true;如果 Object 不是指定类的一个实例,或者 Object 是 null,则返回 false。

需要注意的是 instanceof 在 Java 的编译状态和运行状态是有区别的:

在编译状态中,Class 可以是 Object 对象的父类、自身类、子类。在这三种情况下 Java 编译时不会报错。

在运行转态中,Class 可以是 Object 对象的父类,自身类,不能是子类。在前两种情况下 result 的结果为 true,最后一种为 false。但是 class 为子类时编译不会报错,运行结果为 false。

例子:

  1. class instanceOfDemo{
  2. public static void main(String []args){
  3. instanceOfDemo t=new instanceOfDemo();
  4. if(t instanceof instanceOfDemo){
  5. System.out.println("t是instanceOfDemo的实例");
  6. }
  7. }
  8. }

执行结果:

  1. t是instanceOfDemo的实例

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

/*** 任务:使用 instanceof 运算符判断指定对象是否为特定类的一个实例*/
class Person{}
class Students extends Person{}
class Sch extends Students{}
public class Demos{public static void main(String[] args) {// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码/********* Begin *********/// 创建一个Students对象,判断该对象是否是Person类的实例//如果是输出:true,否则为falseStudents students=new Students();if(students instanceof Person){System.out.println("true");}else System.out.println("false");// 创建一个Sch对象,判断该对象是否是Person类的实例// 输出判断结果Sch sch=new Sch();if(sch instanceof Person){System.out.println("true");}else System.out.println("false");// 创建一个Person对象,判断该对象是否是Students类的实例// 输出判断结果Person person = new Person();if(person instanceof Students){System.out.println("true");} else System.out.println("false");/********** End **********/}
}

学习-Java继承和多态之子类对象特点相关推荐

  1. 学习-Java继承和多态之子类继承性

    第1关:学习-Java继承和多态之子类继承性 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务:定义一个 Dog 类,继承 Animal 类(Animal 类已经定义),定义自己的性别属性, ...

  2. 学习-Java继承和多态之方法重载

    第1关:学习-Java继承和多态之方法重载 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务:使用重载方法为 Student 类创建三个构造方法. 相关知识 Java 中重载是指一个类中可以 ...

  3. 学习-Java继承和多态之final关键字

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目:学习-Java继承和多态之final关键字. 任务:调试代码,对代码进行增添.删除和修改等操作,使得程序能够正常运行,输出结果请 ...

  4. Educoder–Java 2. 成员变量的隐藏 第1关:学习-Java继承和多态之成员变量隐藏之优惠促销价格计算

    文章目录 任务描述 相关知识 编程要求 测试说明 答案 任务描述 本关任务:计算商品打折后的价格. 相关知识 在编写子类的时候,我们仍然可以声明一些新的成员变量,其中有一种特殊的情况就是,所声明的成员 ...

  5. 头歌实践-Java继承与多态

    头歌实践作业 第1关:练习-Java继承和多态之final关键字 第2关:学习-Java继承和多态之对象类型的转换 任务描述 相关知识 向上转型 向下转型 编程要求 第3关:练习-Java继承和多态之 ...

  6. java继承和多态的实验报告_Java继承与多态实验报告.doc

    Java继承与多态实验报告 西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 继承与多态 专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟 学 号: 指导教师 ...

  7. C++之继承探究(五):子类对象作父类对象使用

    前文:C++之继承探究(四):继承的使用 把子类对象当作父类对象使用 分三种情况:   (1) 将子类对象赋值给父类对象.    --把等号右边的子类对象,赋值给等号左边的父类对象时,仅仅是把子类中来 ...

  8. java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题

    Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...

  9. 8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片

    父类和子类对象赋值转换(公有继承) - - - 父类和子类对象赋值转换是指:子类对象可以赋值给父类对象(父类的指针或引用也可以),而父类对象不能赋值给子类对象.也就Student一定是Person,但 ...

最新文章

  1. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
  2. Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
  3. 《大话数据结构》第9章 排序 9.8 归并排序(上)
  4. c++中的引用和python中的引用_对比 C++ 和 Python,谈谈指针与引用
  5. Android热修复升级探索——SO库修复方案
  6. python元类、反射及双线方法
  7. python语言是一门编程语言_python是一门怎样的编程语言?老男孩python入门
  8. python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
  9. 《SpringCloud超级入门》Spring Boot项目搭建步骤(超详细)《六》
  10. 如果表不存在则创建_当创建一个文件的时候,操作系统发生了什么
  11. 苹果高通关系紧张背后:不只是专利问题 还有两家公司CEO的私人恩怨
  12. 小心!你的脸正在成为色情片主角
  13. bit加密的时候会格式化硬盘吗_硬件百科:能在移动SSD上装系统吗?
  14. 技术驱动创新,阿里云开启云网络3.0时代
  15. 默纳克系统服务器怎么查故障,默纳克系统NICE3000和NICE3000new故障历史记录查询方法...
  16. word目录中英文开头目录不对齐
  17. c++获取电脑mac地址
  18. 数据中台:建立在数据网络效应之上的赛道
  19. 读书笔记:《枪炮、病菌与钢铁》与《1984》
  20. 2020年前端学习的新路径

热门文章

  1. ChatGPT的焦虑蔓延,暴露了企业转型的关键要素
  2. CSMAR数据库券商名称简写归类
  3. Unity_实现小地图功能
  4. 没有手机号只有单号怎么快速查询全部物流信息
  5. 低版本vs 打不开相应的.sln文件
  6. 【求职】搜狗 Java 方向面经
  7. linux递归删除class目录,程序员罗杰-Linux 递归批量删除文件夹或文件的命令
  8. [软件更新]WordPress v2.8.1 Final
  9. 女“葛朗台”的计划之购房首期款
  10. 阿里云网盘内测_申请阿里云网盘内测资格