对于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概念的普及,已经得到大家的普遍认可。而且,我们还发现,这种模式还能够让单元测试更加简单。因为不同层次的逻辑分离,使得单元测试的独立性更加容易实现。
要注意的是,对于实现接口的类来说,其实现接口也算是父类哦。。。。。。

JAVA类定义,成员类,抽象类及接口类相关推荐

  1. JAVA抽象类和接口类的区别

    JAVA抽象类和接口类的区别 1.声明方式不同.抽象类为abstract class,接口类为interface. 2.继承抽象类关键字为extends,实现接口关键字为implements. 3.继 ...

  2. 面向对象 抽象类与接口类

    ############  复习 ############### - 先抽象再继承 ########## 接口类与抽象类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码 ...

  3. c++虚继承和虚函数和抽象类、接口类,聚合类

    虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...

  4. Java 的抽象特性:抽象类与接口深度解析

    要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...

  5. java提高篇之抽象类与接口

    转载自 java提高篇之抽象类与接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的 ...

  6. 实体类定义规则以及主要实体类详解

    1.实体类概述 ​ 1.1什么是实体类 众所周知实体类是在java开发中被应运到的,但是什么是实体类? 1.11实体类的定义 百度百科查阅说:实体类主要是作为数据管理和业务逻辑处理层面上存在的类别: ...

  7. 【java进阶02:抽象类和接口】类与类之间的关系 抽象类与接口的区别

    目录 抽象类 接口 抽象类 什么是抽象类 /*类---->对象 :实例化 对象---->类 :抽象抽象类:1.什么是抽象类?类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类 ...

  8. Java 类和对象——抽象类、接口、Object类

    本文章继续来介绍类和对象的知识.重点介绍抽象类和接口,Object类只做简单介绍. 现在,定义一个Shape类(形状类),当不同的对象去调用的时候,就会画出不同的图形,使用圆这个对象去调用,就会画出⚪ ...

  9. java中演示类_java中抽象类与接口的图文演示

    java中抽象类与接口的图文演示 首先看图: 抽象方法: 没有方法体的方法.必须在与抽象类中.被abstract修饰的方法. 1.抽象类可以存在抽象方法,可以存在普通方法 2.抽象类不能实例化 3.抽 ...

最新文章

  1. 为解决Thymeleaf数字格式化问题而想到的几种方案
  2. SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
  3. Linux grep
  4. 数据结构线性表博客作业总结
  5. activiti 设置可选处理人_新品速递|高端系列!慧明DF系列线性相位处理专业音箱处理器...
  6. hfss仿真时间过长怎么解决_一文详解相控阵天线仿真技术
  7. (10)FPGA专业术语(第2天)
  8. IOS中的数据存储 简单总结
  9. SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器
  10. iOS应用开发环境准备
  11. UITextView模拟UITextField 设置Placeholder属性 --董鑫
  12. 查找命令find和其他常用查找命令
  13. Leetcode刷题记录:构建最大数二叉树
  14. 磊科Q3刷236W 免交换机双拨
  15. 盘点AI江湖中,清华人的“无问西东”
  16. 航空发动机性能matlab,基于MATLABSIMULINK的航空发动机建模与仿真研讨.pdf
  17. 五到十分钟java演讲_10分钟励志演讲稿5篇最新
  18. cad镜像后标注尺寸数字反了_CAD中镜像文字后,文字反转了,可以这样轻松调整过来...
  19. 计算机双语论文,计算机双语教学初探论文
  20. 网狐、6878、名字修改图片文字路径【第四次更新】

热门文章

  1. 求小数的某一位(信息学奥赛一本通-T1082)
  2. 4.5.3 循环控制语句
  3. opengl png图片 qt_Qt资源文件的格式,并用CMake添加Qt资源文件
  4. python简写匹配_Python简写
  5. jupyter问题: failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
  6. .jsp页面提交form表单,后台却无法获取input文本框value值
  7. WeLive开源PHP在线客服系统源码
  8. 小程序 长按api_微信小程序API相关知识科普
  9. 新版仿小刀资源网模板—木鱼cms
  10. ds18b20温度转换指令_STM32接口DS18S20温度传感器