接口相关练习题

接口相关练习题前言本篇将根据《Java编程思想》带着大家做一下本章几个相关的练习题一、概念《Java编程思想》中接口的几个概念总结:1.接口没有任何具体的实现,因此多个接口可以进行组合。2.如果从一个非接口的类继承,那么只能从一个类去继承。其余的基元素都必须是接口。3.将所有的接口名都置于implements关键字之后,用逗号将他们一一隔开。4.可以任意继承多个接口,并可以向上转型为每个接口。5.可以扩展接口,但是得到的只是另一个接口。6.当想要创建对象时,所有定义首先必须都存在。7.可以通过继承来扩展接口,使用extends关键字来实现多个继承,用逗号将接口名进行分隔开。二、练习题题目...

Java 2019-10-21 AM 1939℃ 0条

接口中的适配器设计模式(二)

二、适配器设计模式前言通过上一篇文章中,可以实现在Filter类中使用Apply.process()方法,但是这样造成的后果也是巨大的,因为在平时写代码时Processor是不可改写的,那么怎么能不再改写代码的前提下又能实现Filter类对Apply.process()方法的复用呢?下面我们对以下代码做一个分析代码:FilterProcessor.javaclass FilterAdapter implements Processor{ Filter filter; public FilterAdapter(Filter filter){ this.fi...

Java 2019-10-20 AM 2626℃ 1条

接口中的适配器设计模式(一)

接口中的适配器设计模式前言在上一篇文章中提到了解耦,但是并没有做深入的探讨,今天在本篇文章中对解耦做进一步的探讨......一、代码比较我们看上一篇中的代码:class Processor { /** * 返回类名 * @return 类名 */ public String name() { return getClass().getSimpleName(); } /** * 返回object对象 * @param input 传入object对象 * @return 返回obj...

Java 2019-10-19 PM 1457℃ 0条

接口中的策略设计模式

接口中的策略设计模式前言只要一个方法操作的是类而非接口,那么你就只能使用这个类及其子类。如果你想要将这个方法应用于不在此继承结构中的某个类,那么你就会触霉头了。通过上面文字我们可以很清楚的知道,类与类之间的耦合度太高导致我们在进行类的相互调用时,产生许多不便之处。那么下一步我们需要做什么呐?答案是:解耦代码示例class Processor { /** * 返回类名 * @return 类名 */ public String name() { return getClass().getSimpleName(); } ...

Java 2019-10-18 AM 1581℃ 0条

抽象类和抽象方法练习

抽象类和抽象方法练习前言本章小编将带着大家学习《Java编程思想》第九章:接口,书中第一节从抽象类和抽象方法入手,概念都简单易懂,没什么可讲的了,下面小编就带着大家看几道本节的几个课后练习。练习1题目:创建一个基类,让它包含抽象方法print(),并在导出类中覆盖该方法。覆盖后的方法版本可以打印导出类中定义的某个整型变量的值。在定义该变量之处,赋予它非零值。在基类的构造器中调用这个方法。现在,在main()方法中,创建一个导出类对象,然后调用它的print()方法。请解释发生的情形。代码实现:package ThinkInJava; public class AbstractTest0...

Java 2019-10-17 AM 1376℃ 0条

JVM学习二 -- Java程序对类的使用方式

Java程序对类的使用方式前言Java程序对类的使用方式可分为两种1.主动使用2.被动使用所有的Java虚拟机实现必须在每个类或接口被Java程序"首次主动使用"时才初始化他们一、主动使用(七种)1.创建类的实例(new出来一个class对象)2.访问某个类或接口的静态变量,或者对该静态变量赋值(对静态变量赋值和对静态变量取值)3.调用类的静态方法4.反射(如Class.forName("com.test.Test"))5.初始化一个类的子类class Parent{ } class Child extends Parent{ }当初始化child子类的时候,也是对Parent父类的主动...

Java 2019-10-16 PM 1464℃ 0条

JVM学习一 -- 浅谈类的加载过程

浅谈类的加载过程一、类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象(规范并未说明Class对象位于哪里,HotSpot虚拟机将其放在了方法区中)用来封装类在方法区内的数据结构。二、类加载的方式加载.class文件的方式:1.从本地系统中直接加载2.通过网络下载.class文件3.从zip,jar等归档文件中加载.class文件4.从专有数据库中提取.class文件5.将Java源文件动态编译为.class文件三、类的加载、连接与初始化1.加载:查找并加载类的二进制数据(将类的c...

Java 2019-10-16 PM 1463℃ 0条

用继承进行设计

用继承进行设计前言在我们学习多态的过程中会有这样一种体会,看起来似乎所有的东西都可以被继承。 事实上,当我们用现成的类来建立新类时,如果首先考虑使用继承技术,反倒会加重我们的设计负担,使事情变得不必要地复杂起来。 那我们对程序进行设计时应该选择哪种技术呐?答案是:首先选择“组合”。尤其是不能十分确定应该使用哪一种方式时。组合不会强制我们的程序设计进入继承的层次结构中。而且,组合更加灵活,因为它可以动态选择类型(因此也就选择了行为);相反,继承在编译时就需要知道确切类型。 注:本篇先不详细阐述继承和组合的关系,在后面的文章中将进行详细讲解代码示例package ThinkInJava; ...

Java 2019-10-16 AM 1343℃ 0条

协变返回类型

协变返回类型前言一个菜鸟对《Java编程思想》的探索之路。1.概念理解Java SE5中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型。上方是《Java编程思想》的原文,第一遍读的时候是不是感觉很绕...... 意思就是: 子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更 "狭窄" 的类型 。也就是允许返回更为具体的类型 。2.代码下面我们用一个示例来更深的理解:public class CovarianReturn { /** * @param args */ p...

Java 2019-10-15 AM 1383℃ 0条

构造器内部多态方法的行为

构造器内部多态方法的行为前言关于《Java编程思想》的探索之路.....探讨该问题时对构造器调用顺序进行一下梳理:1.调用基类构造器 ,不断递归下去, 首先是构造这种层次结构的根,然后是下一层导出类,等等,直到最低层的导出类;2.按声明的顺序调用成员的初始化方法;3.调用导出类构造器的主体。一、构造器层次结构的调用如果在一个构造器的内部调用正在构造的对象的某个动态绑定的方法,会发生什么有趣的事情?在一般的方法内部,动态绑定的方法的调用是在运行时才决定的,对象在程序运行之前无从得知它自己到底是基类的对象,还是某个导出类的对象。如果在基类的构造器内部调用某个动态绑定方法,并且该方法是被导出类...

Java 2019-10-15 AM 1552℃ 0条