抽象类

JAVA笔试题小集

孤者浪人 提交于 2020-01-27 04:02:10
JAVA笔试题小集 2008/05/08 12:54 第一 ,谈谈final, finally, finalize的区别。 final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 第二 ,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类

接口与抽象类的区别和联系

天大地大妈咪最大 提交于 2020-01-26 19:50:47
接口 1、因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但是可以实现多个接口,同时接口本身也可以继承多个接口。 2、接口里面的成员变量默认是public static final类型的。必须被显示的初始化。 3、接口里面的方法默认都是public abstract类型的。隐式声明。 4、接口没有构造方法,不能被实例化。 5、接口不能实现另外的一个接口,但是可以继承多个接口。 6、类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类就要被定义为抽象类。 抽象类 1、如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。 2、抽象方法必须存在于抽象类中。 3、抽象类中可以有一般的变量和一般的方法。 4、子类继承抽象类必须实现其中的抽象方法,除非子类为抽象类。 接口与抽象类的区别: 1、接口只能包含抽象方法,抽象类可以包括普通方法。 2、接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。 3、接口不包含构造方法,抽象类里可以包含构造方法。 抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,以备抽象类扩充。 1、接口是核心,其定义了要做的事情,包含了许多的方法,但是没有定义这些方法应该如何做。 2、如果许多类实现了某个接口,那么每个都要用代码实现那些方法。 3、如果某一些类的实现有共通之处

Java SPI 机制实现解耦与本地化

ε祈祈猫儿з 提交于 2020-01-26 13:35:47
SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和发现。通过这种方式,可以基于接口编程,实现多个模块的解耦。 SPI 机制实现解耦 如下的示例展示了通过 ServiceLoader 类加载指定接口的所有服务提供者并进行调用的简单实现。 1、定义接口 test.DirMonitor,包含一个方法 start(); 2、实现接口 test.DirMonitor,定义两个实现类 test.ObserverMonitor 和 test.LoopMonitor; 3、设置接口的实现类列表。创建目录 META-INF/services/,新建文件 test.DirMonitor,内容如下: test.ObserverMonitor test.LoopMonitor 4、在程序中通过 ServiceLoader 类加载 test.DirMonitor 接口的实现类,并遍历所有实现类,调用 start() 方法; 从上面的示例可以看出,在代码中仅仅使用到了接口 test.DirMonitor,并没有在代码中使用到具体实现类。通过这种方法,可以实现解耦,接口与实现类可以由不同的开发人员实现,编译到不同的 jar 包中,甚至实现插件的定义与开发。 spi

接口

核能气质少年 提交于 2020-01-26 10:12:16
接口 定义Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 特征1.全局常量: public static final 2.抽象方法:public abstract 所以接口中的成员都是公共的权限. 接口和普通类的关系 类与类之间是继承的关系 类与接口之间是实现关系,而且类的单继承可以有多实现(同时实现多个接口) 接口与接口之间是继承关系,而且接口的继承可以是多继承 (因为接口的方法并没有方法体,即便继承也不用实现方法) 为什么使用接口 接口有比抽象类更好的特性: 1.可以被多继承 2.设计和实现完全分离 3.更自然的使用多态 4.更容易搭建程序框架 5.更容易更换实现 abstract class和interface区别 1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 2、抽象类要被子类继承,接口要被类实现。 3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。 4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。 5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样

C#依赖注入实例

我们两清 提交于 2020-01-26 09:16:19
http://qing.weibo.com/tj/400082fa33001h7x.html 1.5 实现依赖注入1.5.1 背景介绍 设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个(或某类)对象,我们常常会对它们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。 这个过程中有个环节被忽略了——谁来选择客户程序需要的满足抽象类型的具体类型呢?通过后面的介绍你会发现很多时候创建型模式可以比较优雅地解决这个问题。但另一问题出现了,如果您设计的不是具体业务逻辑,而是公共库或框架程序,这时候您是一个“服务方”,不是您调用那些构造类型,而是它们把抽象类型传给您,怎么松散地把加工好的抽象类型传递给客户程序就是另一回事了。 这个情形也就是常说的“控制反转”,IOC:Inverse of Control;框架程序与抽象类型的调用关系就像常说的好莱坞规则:Don’t call me, I’ll call you. 参考Martin Fowler在《Inversion of Control Containers and the Dependency Injection pattern》一文,我们可以采用“依赖注入”的方式将加工好的抽象类型实例“注入”到客户程序中

简单工厂模式

余生颓废 提交于 2020-01-26 05:35:58
今天我给大家分享的是设计模式中的一种重要的模式—— 简单工厂模式 。 基本简介: 简单工厂模式是工厂模式种的一种,从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是 工厂模式 家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 实现方式: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 工厂角色: 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品角色 简单工厂模式简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 优缺点 优点 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个 软件体系结构 的优化。 缺点 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中

两道设计模式的面试题

帅比萌擦擦* 提交于 2020-01-26 04:57:42
两道设计模式的面试题 Binhua Liu 这是最近碰到的2个设计模式的面试题,大概如此: 1, Windows Media Player和RealPlayer是常用的媒体播放器,它们的API结构和调用方法非常不同,现在你的应用需要同时支持调用这2种播放器的API。你要怎么设计? 2, 现在有一种空调,它支持3种模式:Hot Air,Cool Air 和DoNothing。例如,当选择Hot Air模式时,再选择温度为20度,空调将输送热风;选择 Cool Air模式,温度设置为20度时,将输送冷风;在选择DoNothing模式时,空调什么都不做。 你将考虑如何为空调设计应用程序?如果将来空调需要增加支持新的模式呢? 下面是我的解答,权当抛砖引玉。 一、 第一题的解:适配器模式+抽象工厂模式 我采用了抽象工厂模式+适配器模式, 先上图: 设计的重点是: 1,首先看适配器模式。MediaPlayerClassA和RealPlayerClassA都实现了IMediaA接口。MediaPlayerClassA调用MediaPlayer的APIs来实现IMediaA接口定义的功能;RealPlayerClassA则调用RealPlayer APIs。 2,再来看抽象工厂模式。MediaPlayerFactory和RealPlayerFactory继承自抽象类MediaFactory类

JAVA基础

ぃ、小莉子 提交于 2020-01-25 23:50:40
java重写和重载 重写: 是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改 变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要 实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一 个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子 类异常 重载: 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也 可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重写和重载的区别 方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与 子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。 (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类 型和次序不同,则称为方法的重载(Overloading)。 (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回 值也一样的方法,就称为重写

java开发者最困惑的四件事

早过忘川 提交于 2020-01-25 21:19:32
大概每个人在学生时代开始就使用Java了,我们一直在学习Java,但Java中总有一些概念含混不清,不论是对初级还是高级程序员都是如此。所以,这篇文章的目的就是弄清楚这些概念。读完本文你会对这些概念有更深入的了解,还能弄清楚一切灰色的东西。在本书中,我们将讨论匿名内联类、多线程、同步和序列化。 ◎匿名类的用法 ◎多线程 ◎同步的实现 ◎序列化 1匿名类 Java匿名类很像局部类或内联类,只是没有名字。我们可以利用匿名类,同时定义并实例化一个类。只有局部类仅被使用一次时才应该这么做。匿名类不能有显式定义的构造函数。相反,每个匿名类都隐含地定义了一个匿名构造函数。 创建匿名类有两种方法: 1.扩展已有的类(可以是抽象类,也可以是具体类) 2.创建接口 理解代码的最好方法就是先阅读,所以我们首先来看看代码 匿名类可以在类和函数代码块中创建。你也许知道,匿名类可以用接口来创建,也可以通过扩展抽象或具体的类来创建。上例中我先创建了一个接口Football,然后在类的作用域和main()方法内实现了匿名类。Football也可以是抽象类,也可以是与interface并列的顶层类。 Football可以是抽象类,请看下面的代码 匿名类不仅可以是抽象类,还可以是具体类。 如果Football类没有不带参数的构造方法怎么办?我们可以在匿名类中访问类变量吗?我们需要在匿名类中重载所有方法吗? 1

PHP中的 抽象类(abstract class)和 接口(interface)

你离开我真会死。 提交于 2020-01-25 20:45:10
在谈PHP中的 抽象类(abstract class)和 接口(interface) 一、 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。 2 .抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化。 4 . 如果子类实现了抽象方法,那么 子类中抽象方法的访问控制不能比父类中的抽象方法访问控制更严格,也就是说(A父类,B子类) (1) 如果 A 中 abstract_func() 声明为 public ,那么 B 中 abstract_func() 的声明只能是 public ,不能是 protected 或 private (2) 如果 A 中 abstract_func() 声明为 protected ,那么 B 中 abstract_func() 的声明可以是 public 或 protected ,但不能是 private (3) 如果 A