更新时间:2020-05-27 16:14:52 来源:极悦 浏览2074次
使用了关键字abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。特征:
示例:设计一个门类,因为是普通门和指纹门开门的方式是不同的:普通门用钥匙;指纹门可以输入指纹、可以按密码或者用钥匙。但是,二者关门的方式都一样(把门一堆就可以关上了)。这里就符合抽象类的设计思路,把开门设计成抽象方法,具体方法内容交给子类去实现;而把关门设计成普通方法,子类复用该方法就好。
代码实现如下:
public abstract class Door{
public abstract void open();
public void close(){
System.out.println("关门!");
}
}
public class CommonDoor extends Door {
@Override
public void open() {
System.out.println("普通门用钥匙开门。");
}
}
public class FingerprintDoor extends Door {
@Override
public void open() {
System.out.println("指纹门用钥匙、指纹、密码都可以开门。");
}
}
Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口通过关键字interface来定义,类使用接口通过关键字implements来实现。例如:public class A implements B
特征:
示例:
还是门这个类,除了普通门和指纹门,还有警报门,它除了具有开门关门的方法外,还可以实现告警功能,而告警功能并不具备门的普遍性,因此合理的做法是把告警设计成一个接口,当有些门具备告警功能时就去实现告警接口。
代码实现如下:
public interface Alarm{
public void alarm();
}
public class AlarmDoor extends Door implements Alarm {
@Override
public void alarm() {
// TODO Auto-generated method stub
System.out.println("警报门有告警功能。");
}
@Override
public void open() {
System.out.println("警报门用钥匙、指纹、密码都可以开门。");
}
}
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。“面向接口编程”中的“接口”可以说是一种从软件架构的角度、从一个更抽象的层面上指那种用于隐藏具体底层类和实现多态性的结构部件。这里的接口是一种思想层面的用于实现多态性、提高软件灵活性和可维护性的架构部件,而具体语言中的“接口”是将这种思想中的部件具体实施到代码里的手段。接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口的本身反映了系统设计人员对系统的抽象理解。
1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
2.实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
3.接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承。
4.接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
选择接口还是抽象类
1.如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
2.如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。
以上就是极悦java培训机构的小编针对“详细了解Java抽象类与接口”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习