Java基础篇-面向对象3(抽象类和接口)

Java基础篇-面向对象3(抽象类和接口)

抽象类

为了避免一个父类的几个字类反复重写一个方法,避免代码重复,比如说车类,摩托车有两个轮,汽车有四个轮,摩托车定义描述轮子的属性是wheel,而汽车描述轮子的属性定义为hello();他们都是描述车轮子的,一个是wheel,一个是hello, 没有一个标准,除你之外的程序员很难理解你这个hello是什么鬼,。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。我们在车类中将描述轮子的属性统一定义为wheel,不管是摩托车还是汽车在定义轮子时都是wheel。别的程序员一看父类,哦你子类中这个wheel属性描述的是轮子啊。个人理解。。。请多多批评
使用抽象类可以更好地利用这些共同属性和操作,避免代码的重复编写,从而减少出错的几率,提高程序的开发效率。

抽象类特点:

  • 抽象类和抽象方法必须用abstract来修饰
  • 抽象方法只有方法声明,没有方法体,必须定义在抽象类中。
  • 抽象类不可以被实例化,即不可以用new运算符创建对象。
  • 抽象类通过其子类实例化,抽象类的子类必须重写父抽象类的所有抽象方法,否则其子类也是抽象类。
  • 包含一个或多个抽象方法的类必须被声明为抽象类。

创建一个animal抽象类:
public abstract class Animal{
abstract String move(); //定义抽象方法
}

接口

java只支持单继承,即一个子类只能继承一个直接父类。这就很难受,当我一个子类同时具有两个父类的特性动作时,抽象类就不够用了。为了克服单继承的缺点,java引入了接口的概念。使用接口可以实现多重继承。因为一个类可以实现多个接口。java中的接口是一些方法特征的集合,他定义了类可能发出的动作原型,而没有定义这些动作的实现。例如手机和照相机都具有拍照功能。

接口定义的关键字是interface,接口中的方法只有方法声明,没有方法体。

接口定义的一般形式
【访问控制符】 interface 接口名【extends 父接口列表】{
修饰符 方法返回值类型 方法名(参数列表);
}

在接口这种数据类型中,只能书写两类声明的结构:
(1)常量数据:所有的常量数据都是public static的。如果声明时不写,则系统将自动添加这两个修饰符。
(2)抽象方法:接口中的所有方法都只在逻辑上规定该方法的作用, 而不能书写方法体。所有接口中的方法都是public abstract 的,如果声明时不写,则系统将自动添加这两个修饰符。

抽象类的实现接口中声明了常量和抽象方法,抽象方法需要在实现接口的类中实现。java中,一个类利用implements关键字来实现接口,

【访问控制符】 class 类名 【extends 父类名】 implements 接口列表{
	类体
}

接口的抽象方法的访问限制符都已指定为public,所以类在实现方法时,,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的访问控制符。

抽象类和接口主要有以下不同点

(1)定义格式不同。抽象类使用类定义方式(class)进行定义,可以声明抽象方法、普通方法甚至构造方法,其成员的访问权限没做特别的要求;接口使用接口定义方式(interface)进行定义,只能声明常量和抽象方法,其成员的访问权限只能是public。
(2)使用方式不同。抽象类通过继承方式(extends)使用,一个子类只能继承一个抽象类,非抽象类的子类需要能找到所有抽象方法的实现,接口通过实现方式(implements)使用,一个类可以实现多个接口,在实现类中需要将接口中的所有方法都实现。
(3)设计理念不同。抽象类是对类整体进行的抽象,而接口通常是对类的局部行为进行抽象,因而如果行为跨越不同类的对象,可使用接口,对于一些相似的对象,则考虑用抽象类。抽象类一般是自底向上抽象出来,即从子类中发现公共特征并泛化成抽象超类,而接口则是自顶向下设计出来,即是在子类具体实现未确定的情况下,预先做好抽象实体间通信接口设计。

比较抽象类和接口的区别时。一定要强调抽象类是描述事物的本质,而接口是描述事物的功能。
比如:保温杯是水杯,所以水杯应该设计为抽象类,保温杯有保温的功能,所以保温应该设计为接口。
代码如下:
class 保温杯 extends 水杯 implements 保温

                                                      /table>
参考书籍主编
JavaSE快速入门优就业
Java语言程序设计刘卫国
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值