李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
抽象类和抽象方法练习
Leefs
2019-10-17 AM
1895℃
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
NLP
4
标签云
Elastisearch
队列
算法
NIO
持有对象
并发编程
数据结构和算法
Spark RDD
SpringCloud
pytorch
Map
JavaWeb
Java编程思想
Flume
JavaSE
DataWarehouse
Spark SQL
字符串
Python
ClickHouse
随笔
容器深入研究
Shiro
并发线程
Http
递归
线程池
Tomcat
Nacos
Thymeleaf
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭