第八章:抽象类、接口和枚举
- 格式:pptx
- 大小:6.71 MB
- 文档页数:49
Java基础—抽象类和接⼝1.抽象类在Java语⾔中使⽤abstrac关键字来定义抽象类和抽象⽅法,抽象⽅法没有定义,⽅法名后⾯直接跟⼀个分号,⽽不是花括号。
public abstract class Employee{private String name;private String address;private int number;public abstract double computePay();//其余代码}抽象类总结:1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译⽆法通过。
只有抽象类的⾮抽象⼦类可以创建对象。
2. 抽象类中不⼀定包含抽象⽅法,但是有抽象⽅法的类必定是抽象类。
3. 抽象类中的抽象⽅法只是声明,不包含⽅法体,就是不给出⽅法的具体实现也就是⽅法的具体功能。
4. 构造⽅法,类⽅法(⽤static修饰的⽅法)不能声明为抽象⽅法。
5. 抽象类的⼦类必须给出抽象类中的抽象⽅法的具体实现,除⾮该⼦类也是抽象类。
2.接⼝Interface关键字⽤来声明⼀个接⼝。
/* ⽂件名 : Animal.java */interface Animal {public void eat();public void travel();}接⼝总结:1. ⼀个接⼝能继承另⼀个接⼝,和类之间的继承⽅式⽐较相似。
接⼝的继承使⽤extends关键字,⼦接⼝继承⽗接⼝的⽅法2. 接⼝的⽅法声明必须是 public abstract ,即便不写默认也是3. 类实现接⼝时,除⾮实现接⼝的类是抽象类,否则该类要定义接⼝中的所有⽅法。
4. 接⼝⾥⾯只能声明 public static final 修饰的变量5. 接⼝不能被实例化,但是可以被实现类创建3.抽象类与接⼝的区别抽象类中的⽅法可以有⽅法体,能实现⽅法的具体功能,但是接⼝中的⽅法不⾏。
抽象类中的成员变量可以是各种类型的,⽽接⼝中的成员变量只能是 public static final 类型的。
抽象类和接口的区别抽象类和接口的区别和联系在Java语言中,抽象类(abstract class)和接口(interface)是支持抽象类定义的两种机制。
正是由于这两种机制的存在,才赋予了Java强大的面向对对象的功能。
抽象类和接口之间存在着很多相似性,但是又有本质的区别。
对于初学者而言,在使用时很难界定到底采用者两种机制的哪一种。
本文具体分析了这两个概念的相同点和相异处。
二、正文:接口简述:在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。
在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。
但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。
Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。
接口把方法的特征和方法的实现分割开来。
这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。
一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。
抽象类描述:abstract class和interface在Java语言中都是用来进行抽象类定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。
并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
面向对象--接口与抽象类的恩恩怨怨接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。
但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。
就我自己的一点心得,发表一下拙见。
面向对象的一些回顾:面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。
接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。
这其实也是解耦和的体现。
那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。
说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。
是人们要把对现实世界中的一系列方法论应用到程序设计当中来。
从对象这一概念的引入我们就可以揣摩这一点。
人类社会中有很多对象的概念,人、车、物体。
不幸的是用程序来实现这些对象比在概念上定义对象要难很多。
(如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧)MS给出开发者的建议是,用抽象类来实现接口。
子类再继承基类。
实例说明:为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。
我们要造车。
这个车有个基本的属性就是能移动、还必须有轮子。
那我们就设计一个接口1public interface ICar2 {3 string Wheel4 {5 get;6 set;7 }8 void Move();9 }10接下来的事情,就是实现了。
造什么车都行,继承一下就行。
随着科技的发展,我们的车想要飞了。
此时当然不能修改这个接口,因为要遵循开闭原则。
为什么要遵循?我们可以想一下,人坐上飞机能飞上天。
但是也没见谁认为人有会飞这个特性的。
那也好办,不许修改,那我再加一个接口。
1interface IFlyable2 {3 void Fly();4 }5好,我们的飞行汽车最后应该是这样的。
类、抽象类、接口、继承和对象(java)来源:JA V A中文站(www_java-cn_com)这不是什么教材,笔者有时会在论坛上瞧瞧,看到不少初学者问到很多问题,这些问题是java程序员应该懂得的,而一般书上不会讲到或者一笔带过的知识。
因此斗胆涂鸦一篇文章,把想说的在这里一口气说完。
这也是本人第一次写技术性的文章,文笔不畅之外,还请各位见谅。
首先讲清楚类和对象的区别。
类是广泛的概念,表示一个有共同性质的群体,而对象指的是具体的一个实实在在的东西。
例如,“人”是一个类,它可以表示地球上所有的人;而“张三”、“李四”、“爱因斯坦”等则是一个个的对象,或者说它们是“人”这个类的一个个实例。
在Java 中,我们可以定义类,然后创建类的对象。
例如:// 声明一个类“Human”class Human{private String name;public String getName(){实用文档return name;}public void setName(String value){ = value;}//......}创建一个类:Human human = new Human();其次,很多人对对象和对象的引用认识模糊引用是程序操作对象的句柄,相当于C和C++中的指针。
前面说了,对象是一个实实在在的东西,比如前面的代码:Human human = new Human();实用文档程序执行到这里之后,java虚拟机将会在内存中创建一个Human 对象,并将这个对象的引用赋给human 变量。
这里有两步,首先是创建Human 对象,然后把创建的对象的引用赋给human 变量。
如果声明了一个对象的引用,但没有将对象赋值给它,则这个引用指向了空的对象,或者说引用了不存在的对象。
这时如果想通过这个引用访问对象,则会抛出空指针异常,例如:Human human;//......human.setName("张三");下面重点谈一谈类、抽象类、接口和继承之间的关系不少细心的初学者在论坛上问类似这样的问题:1、接口不实现方法,但我却在程序中可以调用接口的方法,这是为什么?比如java.sql 包中的Connection、Statement、ResultSet 等都是接口,怎么可以调用它们的方法呢?实用文档2、抽象类不能实例化,但是jdk中却有很多抽象类的对象,这是为什么?比如System.in 是一个InputStream 类型对象,但InputStream 是抽象类,怎么可以得到它的对象呢?不管怎么样,大家应该明白一点:不管是抽象类中的抽象方法,还是接口中定义的方法,都是需要被调用的,否则这些方法定义出来就没有意义了。
抽象类和接口的区别抽象类:抽象类是特殊的类,只是不能被实例化(将定义了一个或多个纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。
抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。
另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
虽然不能定义抽象类的实例,但是可以定义它的指针,并且指向抽象类的指针实际上在赋值时是指向其继承类的实例化对象的,这样通过统一的使用该指针可以很好的封装不同子类的实现过程,这在模式设计的过程中得到了极大的应用!接口:接口是一个概念。
它在C++中用抽象类来实现,在C#和Java中用interface来实现。
接口是引用类型的,类似于类,和抽象类的相似之处有三点:1、不能实例化;2、包含未实现的方法声明;3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);另外,接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。
除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。
一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
抽象类和接口的区别:1.接口和抽象类的概念不一样。
接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。
接口表示的是,这个对象能做什么。
比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。
说明,他们都是人人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
2.抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。
韩顺平java全部内容笔记韩顺平是一位伟大的计算机科学家,他的Java全部内容笔记,是学习Java的非常好的资料。
该笔记共有近1000页,内容全面详细,涵盖了Java的各个方面,以下是简单介绍:第一部分:Java基础1. Java入门:简介、JDK、Java开发环境的搭建、Hello World程序等。
2. 变量与常量:Java的数据类型、变量的定义与使用、常量的定义与使用等。
3. 运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符等。
4. 控制流程:if语句、switch语句、for循环、while循环、do-while循环等。
5. 数组:一维数组、二维数组、数组排序、数组查找等。
6. 方法:方法的定义与使用、传递参数、返回值等。
7. 面向对象:面向对象的基本概念、类的定义与使用、封装、继承、多态等。
8. 类与对象:类与对象的关系、构造方法、对象成员变量、对象的引用等。
9. 抽象类与接口:抽象类的定义与使用、抽象类与普通类的区别、接口的定义与使用、接口的实现等。
10. 异常处理:异常的概念、异常的分类、异常处理的机制、自定义异常等。
11. 泛型:泛型的定义与使用、泛型类、泛型方法、泛型限定等。
12. 多线程:线程的概念、线程的创建与启动、线程的生命周期、线程的同步、线程通信等。
13. 反射:反射的概念、反射的使用、反射的用途、动态代理等。
14. 注解:注解的概念、注解的使用、自定义注解等。
15. 枚举:枚举的概念、枚举的使用、枚举的用途等。
16. IO流:IO流的基本概念、字节流、字符流、文件读写、序列化等。
17. 网络编程:网络编程的基本概念、Socket编程、服务器与客户端、TCP/UDP等。
18. 数据库编程:数据库的基本概念、JDBC编程、SQL语句、事务等。
19. 集合框架:集合框架的基本概念、ArrayList、LinkedList、HashSet、HashMap 等。
20. JavaWeb编程:Servlet编程、JSP编程、Struts框架、Spring框架、Hibernate 框架等。
接口与抽象类的区别与应用场景对比一、接口与抽象类的定义及特点在面向对象编程中,接口(interface)和抽象类(abstract class)是两种常用的抽象概念,它们都能够用来定义一种规范或者约束,但在使用时有着不同的特点和应用场景。
接口(Interface)接口定义了一组方法的签名,但不包含方法的实现。
一个类可以实现一个或多个接口,从而保证了这些方法在该类中都会被实现。
接口中的方法都是抽象的,而且只能包含常量和抽象方法。
接口是一种轻量级的抽象形式,用于描述类的行为,而不关心具体的实现细节。
抽象类(Abstract Class)抽象类本身无法被实例化,它包含了抽象方法以及普通方法。
抽象方法是没有具体实现的方法,必须在子类中被实现;而普通方法则可以有具体的实现。
抽象类可以包含属性、方法、构造函数等,其目的在于为其子类提供一个通用的模板或者骨架,以便于子类进行扩展或者重写。
二、接口与抽象类的区别1. 设计目的不同接口是用来描述类的行为或者能力,强调的是“做什么”的问题;而抽象类则是用来提供一个具体类的模板或者骨架,强调的是“怎么做”的问题。
2. 实现方式不同接口只能包含抽象方法和常量,而抽象类可以包含抽象方法、普通方法以及属性等。
一个类可以实现多个接口,但只能继承一个抽象类。
3. 灵活性不同由于一个类可以实现多个接口,因此接口提供了更大的灵活性;而抽象类在一定程度上限制了类的继承关系,因为Java是单继承的。
4. 扩展性不同抽象类可以包含成员变量和普通方法,可以为子类提供一些通用的方法或者属性;而接口只有抽象方法和常量,无法包含成员变量,因此扩展性相对较弱。
三、接口与抽象类的应用场景对比1. 接口的应用场景•当多个类具有相似的行为,但实现方式不同的时候,可以使用接口来定义这些行为;•当希望强制实现某些方法,但不关心具体实现时,可以使用接口;•当希望一个类实现多个不相关的行为时,可以使用接口来实现多继承的效果。
抽象类和接口抽象类:抽象类是不完整的,并且它只能用作基类。
抽象类不能直接被实例化,并且对抽象类使用new运算符是编译时错误。
虽然一些变量和值在编译时的类型可以抽象的,但是这样的变量和值必须或者为null,或者含有对非抽象类的实例的引用。
抽象类里面允许含有非抽象成员。
但是抽象类不能被密封。
如果抽象类被密封了,那么抽象类也就失去了它的唯一的作用,因为抽象类不能被实例化,所以它的存在只能是被继承。
这又存在了一个继承的关系,抽象类里面有抽象方法,在继承的时候必须实现其父类的抽象方法,否则编译是不通过的。
当父类已有实际功能的方法时,既是非抽象方法。
该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法。
抽象类中可以有抽象方法,也可有非抽象方法,但是有抽象方法的类必须是抽象类。
抽象类只关心它的子类是否具备某种功能,并不关心其功能的具体实现,具体的行为由子类具体实现,也就是说,在定义抽象方法时,不用实现其具体实施。
接口接口的出现为继承为Java弥补了很大的缺陷,因为继承是单继承,而有时候则需要多继承,接口的出现为软件编程减少了很大的困难。
在接口里面可以定义常量,也可以定义方法,但是这些方法都必须是抽象的方法,接口里面不允许有具体的实现。
接口是一种规范,它的作用也是为了继承,没有继承就没有它的存在。
一个类可以实现多个接口,但是必须把接口里面的方法都实现。
接口中的方法,常量都必须是public修饰的,因为它是用来继承的。
如果不是public的话,这个接口就没有了存在的意义了。
抽象和接口的不同之处抽象类与接口紧密相关。
然接口又比抽象类更抽象:1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
北大青鸟中关村学士后本部北京市海淀区中关村大街49号大华科技商厦A座2层2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。