java编程思想第四版第十四章 类型信息习题
- fda
- dfa
- 第三题u
package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays; import java.util.List;abstract class Shape {void draw(){/** 重点在这里: * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.*/System.out.println(this + ".draw()");}public abstract String toString(); }class Circle extends Shape{@Overridepublic String toString() {return "Circle";} }class Square extends Shape{@Overridepublic String toString() {return "Square";} }class Triangle extends Shape{@Overridepublic String toString() {return "Triangle";} }//菱形 class Rhomboid extends Shape{@Overridepublic String toString() {return "Rhomboid";} }public class Shapes {public static void main(String[] args) {List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(new Circle(), new Square(), new Triangle(), new Rhomboid()));for(Shape shape:shapes){shape.draw();}for(int i=0;i<shapes.size(); i++){Shape shape = shapes.get(i);if(i == 3){Rhomboid r = (Rhomboid)shape;Circle c = (Circle)shape;}}}}
运行结果:
Circle.draw() Square.draw() Exception in thread "main" Triangle.draw() Rhomboid.draw() java.lang.ClassCastException: net.mindview.typeinfo.test4.Rhomboid cannot be cast to net.mindview.typeinfo.test4.Circleat net.mindview.typeinfo.test4.Shapes.main(Shapes.java:63)
不可以向下转型到Circle
第四题
package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays; import java.util.List;abstract class Shape {void draw(){/** 重点在这里: * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.*/System.out.println(this + ".draw()");}public abstract String toString(); }class Circle extends Shape{@Overridepublic String toString() {return "Circle";} }class Square extends Shape{@Overridepublic String toString() {return "Square";} }class Triangle extends Shape{@Overridepublic String toString() {return "Triangle";} }//菱形 class Rhomboid extends Shape{@Overridepublic String toString() {return "Rhomboid";} }public class Shapes {public static void main(String[] args) {List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(new Circle(), new Square(), new Triangle(), new Rhomboid()));for(Shape shape:shapes){shape.draw();}for(int i=0;i<shapes.size(); i++){Shape shape = shapes.get(i);if(i == 3){//添加instanceof判断if (shape instanceof Rhomboid){Rhomboid r = (Rhomboid)shape;}if(shape instanceof Circle){Circle c = (Circle)shape;}}}}}
使用Class.newInstance方法,必须有一个无参构造方法
- 第五题:
package net.mindview.typeinfo;import java.util.ArrayList; import java.util.Arrays; import java.util.List;abstract class Shape {void draw(){/** 重点在这里: * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.*/System.out.println(this + ".draw()");}void rotate(){Class<? extends Shape> clazz = this.getClass();if(!clazz.getSimpleName().equals("Circle")){System.out.println("旋转"+ this);}else{System.out.println(this+"不需要旋转");}}public abstract String toString(); }class Circle extends Shape{@Overridepublic String toString() {return "Circle";} }class Square extends Shape{@Overridepublic String toString() {return "Square";} }class Triangle extends Shape{@Overridepublic String toString() {return "Triangle";} }//菱形 class Rhomboid extends Shape{@Overridepublic String toString() {return "Rhomboid";} }public class Shapes {public static void main(String[] args) {List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(new Circle(), new Square(), new Triangle(), new Rhomboid()));for(Shape shape:shapes){shape.draw();shape.rotate();}/*for(int i=0;i<shapes.size(); i++){Shape shape = shapes.get(i);if(i == 3){Rhomboid r = (Rhomboid)shape;Circle c = (Circle)shape;}}*/}}
- 第七题
package net.mindview.typeinfo.test8;import java.util.HashSet; import java.util.Set;interface A {} interface B {} interface C {}class D implements B{private int di=0;private String dname="";static{System.out.println("this is D");} }class E extends D implements A, B, C{private int ei=0;private String ename="";static{System.out.println("this is E");} }class F extends E implements A {private int fi=0;private String fname="";static{System.out.println("this is F");} } /*** 接受任意对象作为参数, 递归打印出该对象继承体系中所有的的类.* 包括继承的父类, 和实现的接口* * 分析: 一个类智能继承一个父类, 可以实现多个接口.* 父类可以继承一个类,实现多个接口. 实现的接口可能和子类重复, 因此需要去重.* 递归实现* @author samsung**/ class G {public void printSuperClass(Class c){if(c == null) return ;System.out.println(c.getName());//得到这个类的接口Class[] interfaces = c.getInterfaces();for(Class interfaceClass:interfaces){printSuperClass(interfaceClass);}printSuperClass(c.getSuperclass());} }public class Test8 {public static void main(String[] args) {G g = new G();g.printSuperClass(F.class);} }
运行结果:
net.mindview.typeinfo.test8.F net.mindview.typeinfo.test8.A net.mindview.typeinfo.test8.E net.mindview.typeinfo.test8.A net.mindview.typeinfo.test8.B net.mindview.typeinfo.test8.C net.mindview.typeinfo.test8.D net.mindview.typeinfo.test8.B java.lang.Object
- 第八题
package net.mindview.typeinfo.test8;interface A {} interface B {} interface C {}class D {static{System.out.println("this is D");} }class E extends D implements A, B, C{static{System.out.println("this is E");} }class F extends E {static{System.out.println("this is F");} }class G {public void printSuperClass(Class c){Class upClass = c.getSuperclass();try {System.out.println(upClass.newInstance());} catch (InstantiationException e) {System.out.println("实例化Instance 失败");System.exit(1);} catch (IllegalAccessException e) {System.out.println("实例化Instance 失败");System.exit(1);}if(upClass.getSuperclass() != null ){printSuperClass(upClass);}} }public class Test8 {public static void main(String[] args) {G g = new G();g.printSuperClass(F.class);} }
运行结果:
this is D this is E net.mindview.typeinfo.test8.E@17cb0a16 net.mindview.typeinfo.test8.D@1303368e java.lang.Object@37f2ae62
- 第九题
package net.mindview.typeinfo.test9;import java.lang.reflect.Field;interface A {} interface B {} interface C {}class D {public int i=0;public String name="";static{System.out.println("this is D");} }class E extends D implements A, B, C{public int i=0;public String name="";static{System.out.println("this is E");} }class F extends E {public int i=0;public String name="";static{System.out.println("this is F");} }class G {public void printSuperClass(Class c){Class upClass = c.getSuperclass();try {//获取类中的字段Field[] fs = upClass.getDeclaredFields();System.out.println(fs.length);for(Field f:fs){//打印字段名System.out.println(f.getName());//获取字段值Object value = upClass.getDeclaredField(f.getName());System.out.println(value);}} catch (Exception e1) {e1.printStackTrace();}try {System.out.println(upClass.newInstance());} catch (InstantiationException e) {System.out.println("实例化Instance 失败");System.exit(1);} catch (IllegalAccessException e) {System.out.println("实例化Instance 失败");System.exit(1);}if(upClass.getSuperclass() != null ){printSuperClass(upClass);}} }public class Test9 {public static void main(String[] args) {G g = new G();g.printSuperClass(F.class);} }
运行结果:
2 i public int net.mindview.typeinfo.test9.E.i name public java.lang.String net.mindview.typeinfo.test9.E.name this is D this is E net.mindview.typeinfo.test9.E@1440578d 2 i public int net.mindview.typeinfo.test9.D.i name public java.lang.String net.mindview.typeinfo.test9.D.name net.mindview.typeinfo.test9.D@26f04d94 0 java.lang.Object@38a3c5b6
- 第十题
package net.mindview.typeinfo.test10; class Pot{} public class Test10 {public static void judgeType(Object c){Class arrType = c.getClass().getComponentType();System.out.println(arrType.getName());}public static void main(String[] args) {judgeType(new char[10]);judgeType(new String[10]);judgeType(new long[10]);judgeType(new boolean[10]);judgeType(new Pot[10]);}}
运行结果:
char java.lang.String long boolean net.mindview.typeinfo.test10.Pot
- f
- asf
- a
- 第十四题
package net.mindview.typeinfo.test14;import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random;import net.mindview.typeinfo.factory.Factory;/*** 部件类* * 比如: 有过滤器部件, 皮带部件等. * 空气净化器中需要有过滤器部件, 因此要有一个制造空气净化器的过滤器的工厂* 汽车尾气净化器也需要有过滤器部件, 因此需要一个制造汽车尾气的过滤器的工厂* * 皮带* 车轮需要皮带, 因此需要一个制造车轮的皮带的工厂* @author samsung**/ class Part{@Overridepublic String toString() {return this.getClass().getSimpleName();}//目前已注册的部件工厂static List<String> partNames = Arrays.asList("net.mindview.typeinfo.test14.FuelFilter","net.mindview.typeinfo.test14.AirFilter","net.mindview.typeinfo.test14.CabinFilter","net.mindview.typeinfo.test14.OilFilter","net.mindview.typeinfo.test14.FanBelt","net.mindview.typeinfo.test14.GeneratorBelt","net.mindview.typeinfo.test14.PowerSteeringBelt");static{}private static Random rand = new Random(47);//随机得到一个已注册的部件工厂, 并制造部件public static Part createRandom(){int n = rand.nextInt(partNames.size());try {return (Part) Class.forName(partNames.get(n)).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;} }//过滤器部件 class Filter extends Part {}//燃料过滤器部件 class FuelFilter extends Filter {public static class Factory implements net.mindview.typeinfo.factory.Factory<FuelFilter>{@Overridepublic FuelFilter create() {return new FuelFilter();}} }//空气净化器部件 class AirFilter extends Filter {public static class Factory implements net.mindview.typeinfo.factory.Factory<AirFilter>{@Overridepublic AirFilter create() {return new AirFilter();}} }//机舱空气过滤器部件 class CabinFilter extends Filter {public static class Factory implements net.mindview.typeinfo.factory.Factory<CabinFilter>{@Overridepublic CabinFilter create() {return new CabinFilter();}} }//燃油过滤器部件 class OilFilter extends Filter {public static class Factory implements net.mindview.typeinfo.factory.Factory<OilFilter>{@Overridepublic OilFilter create() {return new OilFilter();}} }//皮带部件 class Belt extends Part{}//风扇皮带部件 class FanBelt extends Belt {public static class Factory implements net.mindview.typeinfo.factory.Factory<FanBelt>{@Overridepublic FanBelt create() {return new FanBelt();}} }//发动机皮带部件 class GeneratorBelt extends Belt {public static class Factory implements net.mindview.typeinfo.factory.Factory<GeneratorBelt>{@Overridepublic GeneratorBelt create() {return new GeneratorBelt();}} }//转向动力装置皮带部件 class PowerSteeringBelt extends Belt {public static class Factory implements net.mindview.typeinfo.factory.Factory<PowerSteeringBelt>{@Overridepublic PowerSteeringBelt create() {return new PowerSteeringBelt();}} }/*** 查询目前已注册的工厂类* @author samsung**/ public class RegisteredFactories {public static void main(String[] args) {for(int i=0;i<10;i++){System.out.println(Part.createRandom());}}}
- 第十五题: 内容太多, 直接参考demo
- af
- a
- 第十八题:
package net.mindview.typeinfo;import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.regex.Pattern;public class ShowMethods {private ShowMethods(){}private static String usage = ""+ "usage:\n"+ "ShowMethods qualified.class.name\n"+ "To show all methods in class or:\n"+ "ShowMethods qualified.class.name. word\n"+ "To search for methodds invoiving 'word'";private static Pattern p = Pattern.compile("\\w+\\.");public static void main(String[] args) {if(args.length<1){System.out.println(usage);System.exit(1);}int lines = 0; try {Class<?> c = Class.forName(args[0]);//getMethods获取的是整个继承树中所有的方法Method[] methods = c.getMethods();//获取已有的构造器Constructor[] ctors = c.getConstructors();if(args.length == 1){//打印所有继承树中的方法名for(Method method: methods){System.out.println(p.matcher(method.toString()).replaceAll(""));}//打印全部构造器for(Constructor ctor: ctors){System.out.println(p.matcher(ctor.toString()).replaceAll(""));}lines = methods.length + ctors.length;}else {//打印指定类中的方法for(Method method: methods){if(method.toString().indexOf(args[1]) != -1){System.out.println(p.matcher(method.toString()).replaceAll(""));lines++;}}//打印构造器for(Constructor ctor :ctors){if(ctor.toString().indexOf(args[1])!=-1){System.out.println(p.matcher(ctor.toString()).replaceAll(""));lines++;}}}} catch (ClassNotFoundException e) {e.printStackTrace();}}}
- af
- a
- f
- af
- a
- fa
- f
转载于:https://www.cnblogs.com/ITPower/p/8664944.html
java编程思想第四版第十四章 类型信息习题相关推荐
- Java编程思想第五版(On Java8)(四)-运算符
文章目录 开始使用 优先级 赋值 方法调用中的别名现象 算术运算符 一元加减运算符 递增和递减 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线 指数计数法 位运算符 移位运算符 三元运 ...
- 《JAVA编程思想》学习笔记:第8章(多态)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《JAVA编程思想》学习笔记:第16章(数组)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《汇编语言》王爽(第四版) 第十六章 实验16
文章目录 前言 一.实验任务 二.思路分析 1.程序框架 2.设置前景色 3.设置背景色 三.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十六章 ...
- 《JAVA编程思想》学习笔记:第1-4章(Java概述)
全书目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章 ...
- 《JAVA编程思想》学习笔记:第21章(并发)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《JAVA编程思想》学习笔记:第19章(枚举)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《汇编语言》王爽(第四版) 第十二章 实验12
文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...
- 《汇编语言》王爽(第四版) 第十四章 检测点及实验14
文章目录 目录 前言 一.检测点 1.检测点14.1 (1)检测点14.1.(1) (2)检测点14.1.(2) 2.检测点14.2 (1)实验任务 (2)实现代码 二.实验14 访问CMOS RAM ...
- java 四舍五入_《JAVA编程思想》5分钟速成:1-4章:概述
前言: 1.面向对象的特征有哪些方面? 2.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 3.float f=3.4;是否正确? 4.short s1 = ...
最新文章
- ubuntu 安装docker_Docker: 教程04 - (初始化安装之在 Ubuntu 安装Docker CE)
- Vue.js 由 1 到 2 的旅程 - (1)
- ftp java listfiles_Java FTPClient.listFiles()不能获取目录里的文件
- 【Linux】一步一步学Linux——help命令(16)
- 课堂经验值管理小程序_微信小程序怎么管理门店?
- [vue-cli]不用vue-cli,你自己有搭建过vue的开发环境吗?流程是什么?
- TensorFlow 实现深度神经网络 —— Denoising Autoencoder
- C++ STL front_inserter back_inserter inserter 插入型迭代器的正确打开方式
- matlab的基本使用
- 接口测试--接口基础概念、HTTP协议、接口测试风格、接口测试流程
- 计算机怎么取消用户密码,怎么取消电脑开机密码界面
- python爬去新浪微博_python 爬取新浪微博信息
- 《MATLAB 神经网络43个案例分析》:第3章 遗传算法优化BP神经网络——非线性函数拟合
- Eclipse中如何查看使用的JDK版本?
- 华为云服务器默认密码怎么修改,如何修改云服务器登陆密码
- 矩阵快速幂(51nod)
- Linux != Windows
- linux DD 读写硬盘测试
- 计算机专科升研究生英语看什么书,2021考研必知:计算机备考八大禁忌_考研英语黄皮书...
- 80后上什么大学重要吗?看看这些IT富豪吧
热门文章
- sklearn——AdaBoost应用
- 计算机应用基础课程编制标准,计算机应用基础课程标准.doc
- mysql把select结果存到变量中_mysql实例 select into保存到变量的例子
- cython python3_30倍!使用Cython加速Python代码
- 倩女幽魂7月20日服务器维护,倩女幽魂手游7月20日更新什么?倩女幽魂手游7月20日更新一览...
- 【Pytorch神经网络实战案例】01 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-方法①
- LeetCode 2119. 反转两次的数字
- LeetCode 1140. 石子游戏 II(DP)*
- 程序员面试金典 - 面试题 05.01. 插入(位运算)
- LeetCode 475. 供暖器(双指针二分查找)