Java面向对象程序设计:抽象类,接口用法实例分析

 更新时间:2020年04月16日 10:09:58   作者:随风行云  
这篇文章主要介绍了Java面向对象程序设计:抽象类,接口用法,结合实例形式分析了java抽象类与接口相关概念、原理、用法与操作注意事项,需要的朋友可以参考下

本文实例讲述了Java面向对象程序设计:抽象类,接口用法。分享给大家供大家参考,具体如下:

本文内容:

  • 抽象类
  • 接口
  • 抽象类与接口的异同

 首发日期:2018-03-24


抽象类:

  • 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义“叫”的属性的,显然应该由子类来决定怎么“叫”,但“叫”这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容。
  • 普通类中无法定义抽象方法,所以定义了抽象类。
  • 由于抽象方法子类是必须重写的,不然会运行失败,所以可以确保子类重写抽象方法。
  • 抽象类可以有抽象方法,也可以没有抽象方法(没有抽象方法的抽象类),没有抽象方法时,子类继承不需要覆盖方法。
  • 抽象类不可以实例化,不能用new关键字创建对象。
  • 只有子类覆盖所有的抽象方法后,子类具体化,子类就可以创建对象。如果没有覆盖所有的抽象方法,子类还是抽象类。
  • 抽象方法一定定义在抽象类中,都需要abstract来修饰。抽象方法只允许声明,不允许定义。故此不能有大括号。抽象方法也不允许用final修饰。
  • 抽象类的定义格式:image
  • 抽象方法的定义格式:image
abstract class A{
 abstract void talk();//只能声明,不能具体定义
}

class B extends A{
 void talk() {
  System.out.println("run in B");//子类必须重写抽象方法
 }
}


public class Demo {

 public static void main(String[] args) {
  B b=new B();
  b.talk();

 }

}

接口:

  • 接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。
  • 类重写一个接口中的所有抽象方法称为接口的实现。
  • 接口解决的问题:JAVA不直接支持多继承,但支持多实现。
  • 接口体中包含常量定义和方法声明,不允许对方法进行定义。
  • 接口可以说是完全抽象的抽象类。
  • 子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。
  • 如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。
  • 接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。
  • 接口的定义格式:image
  • 接口的实现:image
package 接口;

interface A{
 public static final int size=100;
 public abstract void talk();
// public abstract void eat();
}
class B implements A{
 //实现A中的抽象方法
 public void talk() {
  System.out.println("B talk");
 }
}
public class Demo {

 public static void main(String[] args) {
  new B().talk();

 }

}

注意:

  1. 如果一个类声明实现了一个接口,但没有实现接口的所有方法,那么这个类必须是抽象类
  2. image如果一个类没有完全实现接口中的所有方法,那么这个类必须是一个抽象类。

抽象类与接口的异同:

  • 相同:
    • 都是抽象的
    • 都不能被实例化
    • 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不提供具体的实现。
  • 差异:
    • 接口是完全抽象
  • 概念设计区别:
    • 抽象类是可以有非抽象方法的,而接口是完全抽象的,其实可以这样理解他们的区别:A,B都是一个抽象类,但它们由于是“父类”,所以一般来说都是有一些具体属性的,可以说抽象类是一个父类的抽象化,但它离不开父类与子类的关系;但接口定义的是行为,它并没有强的父子类关系,它只是完全抽象的定义了一些行为作为标准,就像工厂里的元件的各种标准。
    • 而接口中的变量和方法的修饰符都显示出接口是一个“开放的固定的行为标准”

更多关于java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 一文带你搞懂Java定时器Timer的使用

    一文带你搞懂Java定时器Timer的使用

    定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。而定时器是指定一个时间去执行一个任务,让程序去代替人工准时操作。本文就来聊聊Java定时器Timer的使用,需要的可以参考一下
    2023-01-01
  • SpringMVC视图转发重定向区别及控制器详解

    SpringMVC视图转发重定向区别及控制器详解

    这篇文章主要为大家介绍了SpringMVC视图转发重定向区别及控制器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 在Spring MVC中使用@ControllerAdvice创建全局异常处理器的方法

    在Spring MVC中使用@ControllerAdvice创建全局异常处理器的方法

    在Spring MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解来定义全局异常处理器类,并使用 @ExceptionHandler注解来定义处理特定异常的方法,本文就给大家介绍了Spring MVC @ControllerAdvice创建处理器的方法,需要的朋友可以参考下
    2023-08-08
  • SpringBoot整合WebSocket的客户端和服务端的实现代码

    SpringBoot整合WebSocket的客户端和服务端的实现代码

    这篇文章主要介绍了SpringBoot整合WebSocket的客户端和服务端的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • java中如何判断JSONObject是否存在某个Key

    java中如何判断JSONObject是否存在某个Key

    这篇文章主要介绍了java中如何判断JSONObject是否存在某个Key,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 解决spring boot网关gateway导致的坑,无法下载文件问题

    解决spring boot网关gateway导致的坑,无法下载文件问题

    这篇文章主要介绍了解决spring boot网关gateway导致的坑,无法下载文件的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot 实现https ssl免密登录(X.509 pki登录)

    Spring Boot 实现https ssl免密登录(X.509 pki登录)

    这篇文章主要介绍了Spring Boot 实现https ssl免密登录(X.509 pki登录),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java学习-打印1-1000以内的水仙花数代码实例

    Java学习-打印1-1000以内的水仙花数代码实例

    这篇文章主要介绍了Java打印1-1000以内的水仙花数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Maven的几个常用plugin

    Maven的几个常用plugin

    本文主要介绍了Maven的几个常用plugin。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 解析电子邮件的基本概念及JavaMail API邮件功能使用

    解析电子邮件的基本概念及JavaMail API邮件功能使用

    这篇文章主要介绍了电子邮件的基本概念及JavaMail API邮件功能使用,包括用Java来发送邮件的示例,需要的朋友可以参考下
    2016-02-02

最新评论