在JAVA开发中框架给我们提供了很多方便的接口,但是接口到底是什么呢?在开发中又起到了什么作用呢,这就是java课程今天需要了解的!
一为什么要使用接口
假如有一个需求:要求实现防盗门的功能。门有”开”和”关”的功能,锁有”上锁”和”开锁”的功能。
分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的同时又继承自锁,防盗门不是锁,不符合继承中isa的关系,在java中支持单继承。那么我们如何来解决这一问题,这时就要用到接口。
二什么是接口
在软件中接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现,接口其实上也可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的方法来表示,两者的设计理念也是不同的,抽象类有利于代码复用,接口利于代码的扩展和维护。
三抽象类和接口的区别:
01抽象类可以提供成员方法的实现细节,而接口中只能存在publicabstract方法;
02抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的;
03接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
04一个类只能继承一个抽象类,而一个类却可以实现多个接口。
所谓多态,是把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,但子类实例的本身类型没有改变;如:
A x = new B();
这里虽然是声明了一个 A 类型变量,但 x 的值仍然是指向一个B类型,也就是说xsave()是直接调用 B 类对象的save方法,并没有通过其他方式,它本身就是B类型对象,你可以打印信息 println(xgetClass()) ,它输出的是 B 类而不是 A 类。
Class中有个方法 public native boolean isAssignableFrom(Class<> cls)用来判断子类是否继承于父类的或者父接口的。
你会这样子写:
Class clazz = ;
clazzisAssignableFrom(子类名称);返回true说明是挂号里的类的父类或父接口。
clazzisAssignableFrom(子类名称)里的子类名称跟版本有关,好像是15以上的JDK这里的子类名称都是使用的泛型编程。即传的传数是
class<T> 类型的,你用的时候自己斟酌下版本问题。
而常用的instanceof(class )是指该实例是否属于挂号中的类的父类的一个实例。
如上面的例子:
class A{
}
public class B extends A{
public static void main(String[] args){
Class clazz = Bclass;
Class class1 = Aclass;
Systemoutprintln(class1isAssignableFrom(clazz));
if(class1isAssignableFrom(clazz)){
Systemoutprintln("A是B的父类");
}else{
Systemoutprintln("A不是B的父类");
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1] 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点[2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等[3] 。
JDK(Java Development Kit)称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一些Java工具和Java的核心类库(Java API)。不论什么Java应用服务器实质都是内置了某个版本的JDK。主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如,IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK[13] 。
另外,可以把Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(JAVA Runtime Environment),JRE是支持Java程序运行的标准环境[14] 。
JRE是个运行环境,JDK是个开发环境。因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。但由于JDK包含了许多与运行无关的内容,占用的空间较大,因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可[15] 。
abstract
class和interface是Java语言中对于抽象类定义进行支持的两种机制。它们之间区别:
接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的;
代码演示:
接口A
public
interface
A
{
public
abstract
void
play()
;
public
abstract
void
beFriendly();
}
接口B
public
interface
B
{
public
abstract
void
play()
;
public
abstract
void
beFriendly();
}
一个类实现多个接口@Service("weixinPay")
public
class
WeixinPay
implements
Pay{
@Overrid
public
Object
pay(Map<String,
Object>
map){
return
"weixinpay";
}
}
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现;
接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现;
接口可以实现多重继承,而一个类只能继承一个超类;
扩展资料:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
功能
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。
您好,提问者:
这个是属于向下转型,比如我举个例子:
//这是一个接口interface Person{
}
class ZhangXin implements Person{
}
//转换方式,多态就是父类指向子类的实例
Person p = new ZhangXin();
//转为子类
ZhangXin zx = (ZhangXin)p;
常用接口种类,具体如下。
1javalangString
String类无可争议的获得冠军,应该没有人会否认这一点,这是一个最终类,用于创建/ *** 作不可变的字符串文字。
2javalangSystem
System类的使用取决于你工作的项目类型,你可能没有在项目中使用过它,但它仍然是受欢迎的Java类之一,这是一个不能被实例化的工具类。
这个类的主要用途是访问标准输入、输出、环境变量等等。
3javalangException
Throwable是所有错误和异常的超类,所有异常情况的处理都属于Exception类。
NullPointerException在所有的异常中是最受欢迎的,而Exception异常是在所有异常层次结构的顶部。
4javautilArrayList
一个实现数组的数据结构的类。这个类实现了List接口,是最受欢迎的Java集合类的成员,Arr
ayList和Vector之间的差异是初学者常见的问题之一,它也经常在java面试中被问到。
5avautilHashMap
一个实现键值对数据结构的类,这个类实现了Map接口,类似比较ArrayList与Vector,Hash
Map与Hashtable也是经常拿来比较的。
它也是一个受欢迎的集合类,作为一个属性-值的容器,经常用在应用程序多个层之间的数据传递。
6javalangObject
所有Java类的根类,每一个Java类都是Object类的一个子类,经常使用在平台/框架上。
它包含了一些重要方法,比如:equals,
hashcode,
clone,
toString等等。它自从Java诞生的第一天开始可用。
7javalangThread
线程是一个单一执行的序列,多个线程可以共同存在,共享资源,我们可以扩展Thread类,并创建自己的线程。
当然,使用Runnable也是另一种选择,是否使用这个类取决于你的应用程序的需要,一个普通的应用程序是完全没有必要使用线程的。
8javalangClass
Class类是一个直接继承Object类的子类,这个类没有构造函数,它们的对象是被Java虚拟机通过类加载器加载的。
我们大多数人可能没有直接使用过它,但我认为它是一个重要的做反射的类。
9javautilDate
这是用来处理日期的类,有时候,我们觉得这个类应该加入更多的实用方法,就像每个企业级应用程序都会创建一个日期的实用工具单元。
它自JDK
10开始引入,后来在JDK11中发生巨大变化,弃用了一大堆的方法。
10javautilIterator
这是一个接口,它很受欢迎,用来替换枚举,这是一个简单易用的单元,它用Iterable同步工作。
Dao是数据访问层,用来保存数据。
Service是业务逻辑处理的。
我们开发程序的目的是为了完成业务功能, 理想的情况下程序中的每一条语句都应该是与业务直接相关的, 例如程序中不应该出现连接数据库, 读取某个字段等纯技术性的 *** 作, 而应该是得到用户A的基本信息等具有业务含义的 *** 作 dao(data access object)层存在的意义在于将与数据持久化相关的函数调用剥离出去, 提供一个具有业务含义的封装层 原则上说, dao层与utils等帮助类的功能非常类似, 只是更加复杂一些, 需要依赖更多的对象(如DataSource, SessionFactory)等 如果不需要在程序中屏蔽我们对于特定数据持久层技术的依赖, 例如屏蔽对于Hibernate的依赖, 在dao层我们没有必要采用接口设计 一些简单的情况下我们甚至可以取消整个dao层, 而直接调用封装好的一些通用dao *** 作函数, 或者调用通用的EntityDao类等
程序开发的过程应该是从业务对象层开始的, 并逐步将纯技术性的函数调用剥离到外部的帮助类中, 同时我们会逐渐发现一些业务 *** 作的特定组合也具有明确的含义, 为了调用的方便, 我们会把它们逐步补充到service层中 在一般的应用中, 业务逻辑很难稳定到可以抽象出接口的地步, 即一个service接口不会对应于两个不同的实现, 在这种情况下使用接口往往也是没有必要的
在使用spring的情况下原则上应该避免使用getBean的调用方式, 应该尽量通过注入来获得依赖对象, 但有时我们难免需要直接获取业务对象, 在不使用接口的情况下可以采用如下方式
class TaskService{
public static TaskService getInstance(){
return (TaskService)BeanLoadergetBean(TaskServiceclass);
}
}
在程序中我们可以直接使用TaskServicegetInstance()来得到TaskService对象通过命名规范的约定, 我们可以从类名推导出spring配置文件中的对象名, 因而不需要使用一个额外的硬编码字符串名
以上就是关于java课程分享Java集合类框架的基本接口有哪些全部的内容,包括:java课程分享Java集合类框架的基本接口有哪些、java怎么根据接口找到所有的实现类、java如何判断一个类是否实现了某个接口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)