李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
抽象类和抽象方法练习
Leefs
2019-10-17 AM
1395℃
0条
# 抽象类和抽象方法练习 ### 前言 本章小编将带着大家学习《Java编程思想》第九章:接口,书中第一节从抽象类和抽象方法入手,概念都简单易懂,没什么可讲的了,下面小编就带着大家看几道本节的几个课后练习。 ### 练习1 题目: > ```visual basic > 创建一个基类,让它包含抽象方法print(),并在导出类中覆盖该方法。覆盖后的方法版本可以打印导出类中定义的某个整型变量的值。在定义该变量之处,赋予它非零值。在基类的构造器中调用这个方法。现在,在main()方法中,创建一个导出类对象,然后调用它的print()方法。请解释发生的情形。 > ``` 代码实现: ```java package ThinkInJava; public class AbstractTest01 { public static void main(String[] args) { ChildPrint childPrint = new ChildPrint(); childPrint.print(); } } abstract class FatherPrint{ FatherPrint(){ print(); } abstract void print(); } class ChildPrint extends FatherPrint{ private int number = 3; @Override void print() { System.out.println("number="+number); } } ``` 运行结果: ```java number=0 number=3 ``` > 代码分析: 1. 在主函数中创建ChildPrint对象 + 调用父类FatherPrint类,对父类FatherPrint进行初始化,调用父类的构造函数 + 执行父类构造函数中的print()方法,此时调用子类中的print()方法,因为子类并未执行初始化操作,所以此时number被赋予默认值0. + 执行子类的print()方法,输出number=0。 + 对子类进行初始化,number被赋予初值3。 2. 执行**childPrint.print();**输出number=3。 #### 总结 该练习主要考察对[构造器内部的多态方法和行为]( https://lilinchao.com/archives/9.html )的理解,想对这部分做深入理解的,可以阅读文章[JVM学习一 -- 浅谈类的加载过程]( https://lilinchao.com/archives/20.html )和[JVM学习二 -- Java程序对类的使用方式]( https://lilinchao.com/archives/29.html )。 ### 练习2 题目: > 创建一个不包含任何方法的抽象类,从它那里导出一个类,并添加一个方法。创建一个静态方法,它可以接受指向基类的引用,将其向下转型到导出类,然后再调用静态方法。在main()中,展现它的运行情况。然后,为基类中的方法加上abstract声明,这样就不再需要向下转型。 代码: (需要向下转型的代码实现) ```java public class AbstractTest02 { public static void main(String[] args) { Animal animal = new Dog(); Dog.show(animal); } } abstract class Animal{ } class Dog extends Animal{ void call(){ System.out.println("wangwang...."); } static void show(Animal animal){ ((Dog)animal).call(); } } ``` 运行结果: ```java wangwang.... ``` 代码: (不需要向下 转型的代码实现) ```java public class AbstractTest03 { public static void main(String[] args) { Animal animal = new Dog(); Dog.show(animal); } } abstract class Animal{ abstract void call(); } class Dog extends Animal{ @Override void call() { System.out.println("wangwang..."); } static void show(Animal animal){ animal.call(); } } ``` 运行结果: ```java wangwang... ```
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/36.html
上一篇
JVM学习二 -- Java程序对类的使用方式
下一篇
接口中的策略设计模式
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
高并发
递归
Hbase
MySQL
二叉树
Jquery
排序
DataWarehouse
前端
JavaWEB项目搭建
持有对象
JavaSE
人工智能
gorm
锁
Azkaban
Spring
Spark SQL
查找
线程池
SQL练习题
国产数据库改造
Java编程思想
Sentinel
队列
正则表达式
Http
Nacos
机器学习
FastDFS
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞