李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
抽象类和抽象方法练习
Leefs
2019-10-17 AM
1391℃
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://www.lilinchao.com/archives/36.html
上一篇
JVM学习二 -- Java程序对类的使用方式
下一篇
接口中的策略设计模式
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Java工具类
Jquery
序列化和反序列化
微服务
Typora
DataX
锁
Azkaban
CentOS
Linux
散列
Nacos
Scala
设计模式
LeetCode刷题
SQL练习题
JavaScript
Java阻塞队列
VUE
哈希表
Kibana
Shiro
DataWarehouse
查找
Java编程思想
Spark Streaming
Hadoop
Yarn
Spring
Map
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞