Java中抽象类和接口

104 篇文章 0 订阅

Java中抽象类和接口

抽象类

概念

Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。

举例

public abstract class Person {
 public abstract void eat();
 public abstract void sleep();
}

特点

  1. 抽象类,其修饰符必须为public或者protected,不能是private,因为创建抽象类,就是要被其他类继承,用private修饰了,则不能被子类继承,子类便无法实现该方法。
  2. 抽象类不能用来创建对象,即抽象类不能被直接实例化,要通过其普通子类进行实例化。
  3. 如果一个普通子类继承于一个抽象父类,则该类一定要重写实现该父类的抽象方法。如果该子类仍然是一个抽象类,这也是允许的,就不必重写实现该父类的抽象方法,但必须用abstract修饰。
  4. 抽象级别:抽象类是对整体类的抽象,包含属性和方法。
  5. 实现类的范围不同:抽象类,其实是从子类中提取共性部分,然后抽象出来,反之,子类继承该父类就可以了,也就是说里面的抽象方法一般来自同一个类别。
  6. 设计方式不同:抽象类是要先有子类,然后才抽象出父类,是一种从下往上的构建法则。

作用

  1. 抽象类可以将设计和实现分离;
  2. 通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性;

适用场景

当有多个接口实现公共的部分,则适用抽象类,然后集成它。使用抽象类是为了代码的复用,而使用接口是为了实现多态性。

接口

概念

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。

举例

public interface Person {
	public static final int h = 0;
	
	public void Eat();
	
	public void Sleep(int hour);

}

特点

  1. 接口中定义的全都是抽象方法(默认修饰符:public abstract);
  2. 接口用关键字interface表示。即interface 接口名 { }
  3. 类实现接口用implements表示。即class 类名 implements 接口名 { }
  4. 接口不能实例化;
  5. 成员变量只能是常量,并且是静态的、公共的(默认修饰符:public static final);
  6. 接口没有构造方法。
接口实例化

要重写接口中所有的抽象方法。

作用

  1. 定义接口的重要性:在Java编程,abstract class和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。
  2. 定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
  3. 有利于对代码进行维护:在对一个类进行修改和删除需要耗费巨大的人力物力,并且再修改的过程中有可能会改变其他的类的正常使用;但是使用接口就可以很简单地进行修改更新,直接引用即可。这样就达到维护、拓展的方便性。
  4. 保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。

适用场景

该类下某些子类需要该方法而有一些则不需要,那么就在需要的子类下接入接口即可

普通来与抽象类区别

  1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
  2. 抽象类不能用来创建对象;
  3. 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。

接口与抽象类区别

概念

  1. 接口是对动作的抽象,抽象类是对本质的抽象;
  2. 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么;
  3. 在高级语言上,一个类只能继承一个类或抽象类,但是可以实现多个接口。

使用情况

  1. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高;
  2. 抽象类可以有具体的方法和属性, 接口只能有抽象方法和不可变常量(final);
  3. 抽象类主要用来抽象类别,接口主要用来抽象功能;
  4. 抽象类中不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的;
  5. e.抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法。

使用场合

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

接口和抽象类的异同是什么

相同点:

1.都不能被实例化。
2.接口的实现类和抽象类的子类只有全部实现了接口或者抽象类中的抽象方法后才可以被实例化。

不同点:

1.接口只能定义抽象方法不能实现方法,抽象类既可以定义抽象方法,也可以实现方法。
2.单继承,多实现。接口可以实现多个,只能继承一个抽象类。
3.接口强调的是功能,抽象类强调的是所属关系。
4.接口中的所有成员变量 为public static final, 静态不可修改,当然必须初始化。接口中的所有方法都是public abstract 公开抽象的。而且不能有构造方法。抽象类就比较自由了,和普通的类差不多,可以有抽象方法也可以没有,可以有正常的方法,也可以没有。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值