- 浏览: 88747 次
- 性别:
- 来自: 广州
最新评论
最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧时间上来为大家写些什么,简单一点,希望大家不要介意。
今天来补充说明抽象类和接口。
对于class定义,格式如下:
[public|protected|private] [abstract|final] class 类名
{
//类的内容
....
}
前面是modifier。
需要特别说明的是,对于一个JAVA文件,要求里面一定只能有一个和该文件同名的public类。但是倒不是说一个JAVA文件只能有一个类:
像上面的写法也是可以的,只是一般情况下我们不提倡。因为一般这样写的原因只有一个,就是这个类只会在同一个java文件里面被调用,而不会在其它地方被调用。而且这种写法只能定义default类型的普通类,抽象类,或者final类
另外类中有类也是可以的:
private类型的类只能通过这种方式来定义。
需要注意的是,成员类的外部调用是很有趣的:
只要把成员类的所有类也加进来,然后用.来调用成员类就好了。这种调用方式和static方法的调用是一样的。
然后就是抽象类的定义:
和一般的类不一样,abstract类里面可以定义抽象方法。抽象方法不需要实现,这点和一会介绍的接口类似。
但是和接口不一样的地方,就是抽象类里面也可以定义具体的方法体。抽象类的一般用法就是定义一类类的普遍行为,然后预言其中实现各部相同但是却共有的方法,例如:
上例列出了一个交通工具抽象类,各类都会有run,stop,isMoving和speed方法。而且stop,run和isMoving方法行为默认都是一样的,而speed则留待子类去实现。当我们每个子类都预期会实现父类某个特定方法的时候,建议把这个父类方法定义为一个抽象方法。这样可以强迫子类针对该方法去定义各自的行为。
假如我们在类定义的时候,使用了final关键字,则该类不允许再被继承:
最后我们说一下接口。接口的定义和类类似:
接口类专门用于定义一系列的方法,及相应的一些配套常量。现在我们就多了一种指针——接口指针。首先看看以下例子:
首先,实现接口的类用implements关键字表达,而且接口的实现和继承不一样,一个类可以实现多个接口,各接口用,分开就可以。但是要注意不要有两个接口的方法名一致而返回类型不一致。对于所有的接口方法的实现,都必须是标识为共有访问权。
可能大家会问接口方法标为公有和默认有什么区别呢?很简单,就是当你是调用接口指针变量去访问方法时,会有不同:
上面是一个很有趣的例子。它同时为我们展现了接口指针的用法,也告诉我们在指针里面定义默认方法和公有方法的区别。
那么,可能大家想知道,接口类有什么用途呢?如果大家要做架構分离,还有单元测试,就会知道接口定义是非常方便的一种设计模式。
因为接口指针可以帮助我们把实现类和调用类分离,当然我们上面的例子不足以说明这个好处。这种做法的实现方式以前我们一般会采用大工厂方式,就是在一个类里面,定义出所有接口及其调用实现类的匹配关系,然后提供一个getInstance方法,给出特定接口类,获取对应的接口实现,但是这个实现会对调用getInstance的类透明,它只拿到一个可以被调用接口方法的实现而已,而不是直接去调用这个实现实体。
试想一下,我们对数据库的操作,全部用接口模式实现的话,那么即使我更换了数据库,最坏的情况也就是把所有数据库操作的实现类代码重写就可以了,而不需要连调用数据库操作层的代码也要修改。这就是接口提供的便利。因为它为我们的代码分离提供了可能。
现在接口这种设计模式,随着Spring及IoC概念的普及,已经得到大家的普遍认可。而且,我们还發現,这种模式还能够让单元测试更加简单。因为不同层次的逻辑分离,使得单元测试的独立性更加容易实现。
要注意的是,对于实现接口的类来说,其实现接口也算是父类哦。。。。。。
下次我们来说一下1.5的新特性:枚举类
今天来补充说明抽象类和接口。
对于class定义,格式如下:
[public|protected|private] [abstract|final] class 类名
{
//类的内容
....
}
前面是modifier。
需要特别说明的是,对于一个JAVA文件,要求里面一定只能有一个和该文件同名的public类。但是倒不是说一个JAVA文件只能有一个类:
//file name: ClassDeinfeDemo.java package classdefine; /** * This class is required in this file */ public class ClassDeinfeDemo { } public class AnotherPublicClass { } class ProtectedClass { }
像上面的写法也是可以的,只是一般情况下我们不提倡。因为一般这样写的原因只有一个,就是这个类只会在同一个java文件里面被调用,而不会在其它地方被调用。而且这种写法只能定义default类型的普通类,抽象类,或者final类
另外类中有类也是可以的:
package classdefine; public class MemberClassDemo { /** * I'm a member of this class */ private class MemberClass { } public class PublicMemberClass { } }
private类型的类只能通过这种方式来定义。
需要注意的是,成员类的外部调用是很有趣的:
package classdefine; public class MemberClassCall { public static void main(String[] args) { new MemberClassDemo.PublicMemberClass(); } }
只要把成员类的所有类也加进来,然后用.来调用成员类就好了。这种调用方式和static方法的调用是一样的。
然后就是抽象类的定义:
package classdeinfe; public abstract AbstractClass { public abstract void abstractMethod(); public void entityMethod() { .... } }
和一般的类不一样,abstract类里面可以定义抽象方法。抽象方法不需要实现,这点和一会介绍的接口类似。
但是和接口不一样的地方,就是抽象类里面也可以定义具体的方法体。抽象类的一般用法就是定义一类类的普遍行为,然后预言其中实现各部相同但是却共有的方法,例如:
package classdeinfe; public abstract Vehicle { public abstract float speed(); public void run() { .... } public void stop() { .... } public boolean isMoving() { .... } }
上例列出了一个交通工具抽象类,各类都会有run,stop,isMoving和speed方法。而且stop,run和isMoving方法行为默认都是一样的,而speed则留待子类去实现。当我们每个子类都预期会实现父类某个特定方法的时候,建议把这个父类方法定义为一个抽象方法。这样可以强迫子类针对该方法去定义各自的行为。
假如我们在类定义的时候,使用了final关键字,则该类不允许再被继承:
package classdefine; public final class FinalClass { }
最后我们说一下接口。接口的定义和类类似:
package classdeinfe; public interface MyInterface { public static final String CONSTANT_DEMO = "test"; public void publicMethod(); void defaultMethod() throws Exception; }
接口类专门用于定义一系列的方法,及相应的一些配套常量。现在我们就多了一种指针——接口指针。首先看看以下例子:
package classdeinfe public class MyInterfaceImpl implements MyInterface{ public void publiMethod() { .... } /** * 尽管我们的接口定义的方法访问控制类型为默认,但是实现类里面 * 这个方法一定要是共有的 */ public void defaultMethod() throws Exception { .... } }
首先,实现接口的类用implements关键字表达,而且接口的实现和继承不一样,一个类可以实现多个接口,各接口用,分开就可以。但是要注意不要有两个接口的方法名一致而返回类型不一致。对于所有的接口方法的实现,都必须是标识为共有访问权。
可能大家会问接口方法标为公有和默认有什么区别呢?很简单,就是当你是调用接口指针变量去访问方法时,会有不同:
package classdeinfe.sub; import classdeinfe.MyInterface; import classdeinfe.MyInterfaceImpl; public class InterfaceCallDemo1 { public static void main(String[] args) { MyInterface intf = new MyInterfaceImpl(); intf.publicMethod(); //可以调用 intf.defaultMethod(); //无法调用,因为是default方法 /* * 可以调用,因为对于MyInterfaceImpl类来说,其defaultMethod是 * 公有方法 */ ((MyInterfaceImpl)intf).defaultMethod(); } }
上面是一个很有趣的例子。它同时为我们展现了接口指针的用法,也告诉我们在指针里面定义默认方法和公有方法的区别。
那么,可能大家想知道,接口类有什么用途呢?如果大家要做架構分离,还有单元测试,就会知道接口定义是非常方便的一种设计模式。
因为接口指针可以帮助我们把实现类和调用类分离,当然我们上面的例子不足以说明这个好处。这种做法的实现方式以前我们一般会采用大工厂方式,就是在一个类里面,定义出所有接口及其调用实现类的匹配关系,然后提供一个getInstance方法,给出特定接口类,获取对应的接口实现,但是这个实现会对调用getInstance的类透明,它只拿到一个可以被调用接口方法的实现而已,而不是直接去调用这个实现实体。
试想一下,我们对数据库的操作,全部用接口模式实现的话,那么即使我更换了数据库,最坏的情况也就是把所有数据库操作的实现类代码重写就可以了,而不需要连调用数据库操作层的代码也要修改。这就是接口提供的便利。因为它为我们的代码分离提供了可能。
现在接口这种设计模式,随着Spring及IoC概念的普及,已经得到大家的普遍认可。而且,我们还發現,这种模式还能够让单元测试更加简单。因为不同层次的逻辑分离,使得单元测试的独立性更加容易实现。
要注意的是,对于实现接口的类来说,其实现接口也算是父类哦。。。。。。
下次我们来说一下1.5的新特性:枚举类
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8686如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2168今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1902最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1547今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7612关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2303昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2277布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1089今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1507自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2084现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1576因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1259很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4022昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2606今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9561昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1278继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1581上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1545以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
5. **接口与抽象类的区别**:对比两者在使用上的差异,包括继承的数量限制(一个类只能继承一个抽象类,但可以实现多个接口)和成员类型(抽象类可有实例变量,接口则没有)。 6. **适配器模式**:可能会介绍如何...
3. 方法实现:抽象类中的抽象方法可以有默认实现,而接口中的方法没有默认实现,除非是在Java 8及以上版本中引入的默认方法和静态方法。 4. 访问修饰符:抽象类中的方法可以有不同的访问修饰符,而接口中的所有方法...
### Java利用接口和抽象类改写求圆的面积和梯形的面积 #### 深入理解Java的接口和抽象类 在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性和代码复用的重要概念。它们都无法被...
在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键概念,它们各自有特定的用途和优缺点。本文将深入探讨这两种概念,帮助你理解它们之间的区别以及如何在实际开发中选择使用...
### Java中的抽象类和接口的理解 #### 一、引言 在面向对象编程语言Java中,抽象类(Abstract Class)和接口(Interface)是实现多态性和代码复用的重要手段。它们都允许开发者定义行为规范而不需要具体实现细节,...
Java中的抽象类(abstract class)和接口(interface)都是用于创建抽象化模型的重要工具,它们在面向对象编程中扮演着核心角色。这两种机制都允许我们定义一组方法的签名,但不提供具体实现,从而实现“设计契约”...
本文将深入探讨Java接口与抽象类的概念及其应用场景,并通过实例帮助读者理解它们各自的优势及适用场合。 #### 二、Java接口 Java接口是一种完全抽象的类,它只包含常量和抽象方法的声明,不允许有具体的实现代码...
学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...
在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键概念,它们各自有特定的用途和特点。本篇内容将深入探讨接口和抽象类的区别,帮助Java开发者更好地理解这两种面向对象编程...
Java抽象类接口与多态PPT教案学习 Java抽象类接口与多态是Java编程语言的核心概念,本篇资源文件将详细介绍Java中的抽象类、接口和多态的概念、特点和应用。 一、抽象类 抽象类是Java中的一种特殊的类,它不能被...
面向对象与Java实现:抽象类、接口的深度解析 面向对象程序设计(OOP)是现代软件工程中的核心概念,它通过封装、继承、多态等特性来构建灵活、可复用和可扩展的代码结构。Java作为一门广泛使用的面向对象语言,提供...
抽象类可以包含构造器,用于初始化抽象类中的成员变量,但不能创建抽象类的实例。 8. **匿名内部类与抽象类** 匿名内部类可以实现接口或继承抽象类,而且可以是抽象的,只要它满足不包含抽象方法的条件。 9. **...
在这个实验中,我们探讨了如何使用Java编程语言来创建和使用抽象类以及继承的概念。抽象类Shape被设计为一个基础类,它定义了两个抽象方法:`getArea()` 和 `getPerimeter()`,用于计算形状的面积和周长。抽象方法在...
Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...
在Java中,抽象类和接口都是用来定义一组行为,但它们的设计目的、使用场景以及约束条件有所不同。 **抽象类(Abstract Class)** 1. **定义**:抽象类是包含抽象方法(没有具体实现的方法)的类,用`abstract`...
复习时,可以详细阅读`Java抽象类.docx`来理解抽象类的定义、用途和实例化规则,通过`Java接口.docx`学习接口的定义、实现方式以及多继承的特点,`Java内部类.docx`将帮助你掌握不同类型的内部类及其应用场景。...
### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个“Java抽象类和接口相关操作源码”压缩包中,你可能会找到一系列的实例代码,帮助初学者更好地...