Java编程那些事儿68——抽象类和接口(一)
- 格式:pdf
- 大小:575.44 KB
- 文档页数:3


在java语言中,接口和抽象类都不能被实例化,都位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
在一定程度上,接口和抽象类很相似,在实现某些功能时,两者可以相互替换,所以有些程序员对接口和抽象类的选择比较随意。
但是,实际上两者之间的设计理念有很大的不同,抽象类用于继承,表示is-a的关系,而接口用于实现,表示like-a关系,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。
那对于接口和抽象类该如何选择???一、从语义的角度选择接口与抽象类在语义上区别主要在定义和使用格式上,下面来看抽象类和接口的定义和使用格式:1.抽象类的定义和使用格式在java定义抽象类时,要在关键字class前面加上关键字abstract。
其具体格式如下:abstract class 类名{类体}抽象类通过继承的方式使用,一个子类只能继承一个抽象类(父类),在子类中必须实现抽象类中所有的抽象方法。
具体的实现方式如下:class 类名extends 抽象类{//实现全部抽象方法}2.接口的定义和使用格式在java中,可以使用关键字interface定义一个接口,一个接口由变量的定义和方法定义两部分组成。
定义接口的基本语法格式如下:interface 接口名{[public] [static] [final] 变量;[public] [abstract] 方法;}接口通过实现的方式使用,一个类可以实现多个接口,在实现类中,需要将接口中所有的方法均实现。
其具体格式如下:class 类名implement 接口列表{//实现所有接口中声明的方法}在了解接口和抽象类的定义和使用格式后,再来看如何选择接口或者抽象:(1)抽象类可以提供成员的实现细节,而接口不能。
设计抽象时,如果要求提供成员的实现细节,可选择抽象类。
(2)如果设计抽象时选择抽象类,在以后的版本中可以随意为抽象类添加新成员。
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修饰,⼦类必须实现抽象类中的抽象⽅法,如果有未实现的,那么⼦类也必须⽤ abstract 修饰。
抽象类默认的权限修饰符为public,可以定义为 public 或 procted,如果定义为 private,那么⼦类则⽆法继承。
抽象类不能创建对象抽象类和普通类的区别1. 抽象类必须⽤public、procted 修饰(如果为private修饰,那么⼦类则⽆法继承,也就⽆法实现其抽象⽅法)。
默认缺省为 public2. 抽象类⽆法创建对象3. 如果⼀个⼦类继承抽象类,那么必须实现其所有的抽象⽅法。
如果有未实现的抽象⽅法,那么必须定义为 abstract接⼝接⼝中的变量隐式的使⽤public static final修饰,并且需要给出初始值。
⽅法隐式的使⽤public abstract修饰(并且只能是 public ,如果是private,procted,那么就编译报错)。
接⼝中的⽅法默认不能有具体的实现(JDK1.8开始可以有默认的实现)接⼝和抽象类的区别1. 抽象类只能继承⼀次,但是可以实现多个接⼝2. 接⼝和抽象类必须实现其中所有的⽅法,抽象类中如果有未实现的抽象⽅法,那么⼦类也需要定义为抽象类。
抽象类中可以有⾮抽象的⽅法3. 接⼝中的变量必须⽤ public static final 修饰,并且需要给出初始值。
所以实现类不能重新定义,也不能改变其值。
4. 接⼝中的⽅法默认是 public abstract,也只能是这个类型。
不能是 static,接⼝中的⽅法也不允许⼦类覆写,抽象类中允许有static 的⽅法。
Java的接⼝和抽象类Java的接⼝和抽象类 在Java中,可以通过两种形式来体现OOP的抽象:接⼝和抽象类。
这两者有太多相似的地⽅,⼜有太多不同的地⽅。
很多⼈在初学的时候会以为它们可以随意互换使⽤,但是实际则不然。
今天我们就⼀起来学习⼀下Java中的接⼝和抽象类。
下⾯是本⽂的⽬录⼤纲: ⼀.抽象类 ⼆.接⼝ 三.抽象类和接⼝的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激。
⼀.抽象类 在了解抽象类之前,先来了解⼀下抽象⽅法。
抽象⽅法是⼀种特殊的⽅法:它只有声明,⽽没有具体的实现。
抽象⽅法的声明格式为: abstract void fun(); 抽象⽅法必须⽤abstract关键字进⾏修饰。
如果⼀个类含有抽象⽅法,则称这个类为抽象类,抽象类必须在类前⽤abstract 关键字修饰。
因为抽象类中含有⽆具体实现的⽅法,所以不能⽤抽象类创建对象。
下⾯要注意⼀个问题:在《Java编程思想》⼀书中,将抽象类定义为“包含抽象⽅法的类”,但是后⾯发现如果⼀个类不包含抽象⽅法,只是⽤abstract修饰的话也是抽象类。
也就是说抽象类不⼀定必须含有抽象⽅法。
个⼈觉得这个属于钻⽜⾓尖的问题吧,因为如果⼀个抽象类不包含任何抽象⽅法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。
[public] abstract class ClassName { abstract void fun(); } 从这⾥可以看出,抽象类就是为了继承⽽存在的,如果你定义了⼀个抽象类,却不去继承它,那么等于⽩⽩创建了这个抽象类,因为你不能⽤它来做任何事情。
对于⼀个⽗类,如果它的某个⽅法在⽗类中实现出来没有任何意义,必须根据⼦类的实际需求来进⾏不同的实现,那么就可以将这个⽅法声明为abstract⽅法,此时这个类也就成为abstract类了。
包含抽象⽅法的类称为抽象类,但并不意味着抽象类中只能有抽象⽅法,它和普通类⼀样,同样可以拥有成员变量和普通的成员⽅法。