没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2010-01-29 10:50:16.000|阅读 1524 次
概述:今天主要介绍一下Java中类的定义,包括成员类,抽象类及接口类。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
今天主要介绍一下Java中类的定义,包括成员类,抽象类及接口类。
对于class定义,格式如下:
[public|protected|private] [abstract|final] class 类名 { //类的内容 .... } |
前面是modifier。
需要特别说明的是,对于一个JAVA文件,要求里面一定只能有一个和该文件同名的public类。但是倒不是说一个JAVA文件只能有一个类:
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类
另外类中有类也是可以的:
Java代码
package classdefine; public class MemberClassDemo { /** * I'm a member of this class */ private class MemberClass { } public class PublicMemberClass { } } |
private类型的类只能通过这种方式来定义。
需要注意的是,成员类的外部调用是很有趣的:
Java代码
package classdefine; public class MemberClassCall { public static void main(String[] args) { new MemberClassDemo.PublicMemberClass(); } } |
只要把成员类的所有类也加进来,然后用.来调用成员类就好了。这种调用方式和static方法的调用是一样的。
然后就是抽象类的定义:
Java代码
package classdeinfe; public abstract AbstractClass { public abstract void abstractMethod(); public void entityMethod() { .... } } |
和一般的类不一样,abstract类里面可以定义抽象方法。抽象方法不需要实现,这点和一会介绍的接口类似。
但是和接口不一样的地方,就是抽象类里面也可以定义具体的方法体。抽象类的一般用法就是定义一类类的普遍行为,然后预言其中实现各部相同但是却共有的方法,例如:
Java代码
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关键字,则该类不允许再被继承:
Java代码
package classdefine; public final class FinalClass { } 最后我们说一下接口。接口的定义和类类似: Java代码 package classdeinfe; public interface MyInterface { public static final String CONSTANT_DEMO = "test"; public void publicMethod(); void defaultMethod() throws Exception; } |
接口类专门用于定义一系列的方法,及相应的一些配套常量。现在我们就多了一种指针——接口指针。首先看看以下例子:
Java代码
package classdeinfe public class MyInterfaceImpl implements MyInterface{ public void publiMethod() { .... } /** * 尽管我们的接口定义的方法访问控制类型为默认,但是实现类里面 * 这个方法一定要是共有的 */ public void defaultMethod() throws Exception { .... } } |
首先,实现接口的类用implements关键字表达,而且接口的实现和继承不一样,一个类可以实现多个接口,各接口用,分开就可以。但是要注意不要有两个接口的方法名一致而返回类型不一致。对于所有的接口方法的实现,都必须是标识为共有访问权。
可能大家会问接口方法标为公有和默认有什么区别呢?很简单,就是当你是调用接口指针变量去访问方法时,会有不同:
Java代码
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概念的普及,已经得到大家的普遍认可。而且,我们还发现,这种模式还能够让单元测试更加简单。因为不同层次的逻辑分离,使得单元测试的独立性更加容易实现。
要注意的是,对于实现接口的类来说,其实现接口也算是父类哦。。。。。。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号