Java抽象类和抽象方法

参考博客:
Java抽象类和抽象方法
java提高篇(五)—–抽象类与接口

抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类

抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。

对象不能由 抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。

在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没 有方法体,也就是说抽象方法只需要声明而不需要实现。

当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是 abstract的,而这个子类也必须是抽象的,即声明为abstract。

抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法, 但是构造方法不能被声明为抽象。

抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。

abstract不能与private、static、final、native并列修饰同一个方法。

程序举例:

abstract class Animal    //定义抽象类
{String str;Animal(String s)     //定义抽象类的一般方法{ str=s;}abstract void eat();      //定义抽象方法
}
class Horse extends Animal     //定义继承Animal的子类
{   String str;Horse(String s){super(s);      //调用父类的构造方法}void eat()      //重写父类的抽象方法{      System.out.println("马吃草料!");}
}
class Dog extends Animal
{String str;Dog(String s){}

=========================================================================

抽象方法 就 是以abstract修饰的方法,这种方法是不完整的;仅有声明而没有方法体。如:

abstract void f();

当一个子类继承某个抽象类时,它可以有两个选择:

  • 部分实现或完全不实现父类的所有抽象方法,但此时子类必须声明为抽象类;
  • 实现父类所有的抽象方法,此时之类不比声明为抽象类。

包含抽象方法的类叫做“抽象类 ”。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。(否则,编译器就会报错。)

抽象类不能被实例化(be instantiated),但可以实例化非抽象子类。

抽象类 和接口的区别 :

  1. 一个类可以实现任意多个接口,但最多只能作为一个抽象类的子类。
  2. 一个抽象类可以有若干个抽象方法(但到少要有一个),而接口的所有方法都是抽象的,无论是否将它的方法显示地声明为抽象的。
  3. 一个抽象类可以声明实例变量,其子类可以继承这些实例变量。而一个接口不能声明实例变量,不过接口可以声明static final修饰域。
  4. 抽象类可以有构造方法,而接口不能。
  5. 抽象类的可见性修饰符可以是public、protected、private或无修饰符(表示包内可见);而接口的可见性修饰符只能是 public,或无修饰符(包内可见)。
  6. 抽象类的方法的可见性修饰符可以是public、protected、private,或无(表示包内可见);而一个接口的方法的可见性修饰符只能是 public,不指明的话就是默认public。
  7. 抽象类是从object类派生而来,它继承了object的clone()和equals()方法。

抽象类和接口的区别:

尽管抽象类和接口之间存在较大的相同点,甚至有时候还可以互换,但这样并不能弥补他们之间的差异之处。下面将从语法层次和设计层次两个方面对抽象类和接口进行阐述。

语法层面:

抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。

对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。

设计层面

上面只是从语法层次和编程角度来区分它们之间的关系,这些都是低层次的,要真正使用好抽象类和接口,我们就必须要从较高层次来区分了。只有从设计理念的角度才能看出它们的本质所在。一般来说他们存在如下三个不同点:

  1. 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象

  2. 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is-a” 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

  3. 设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!所以说抽象类往往都是通过重构而来的!但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,我们要做的就是事前定义好飞的行为接口。所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

Java抽象类和抽象方法相关推荐

  1. Java 抽象类和抽象方法

    Java 抽象类和抽象方法 抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类. 使用抽象类可以充分利用这些公共属性来提高开发和维护程序的效率. 抽象方法必须为public或prote ...

  2. 二十四、深入Java抽象类,抽象方法和接口

    @Author:Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...

  3. java抽象类与抽象方法详解+练习题

    抽象类与抽象方法 一.为什么使用抽象方法和抽象类 二.抽象方法 抽象方法指一些只有方法声明,而没有具体方法体的方法. 结构 abstract class 类名称 // 定义抽象类 {声明数据成员;访问 ...

  4. Java抽象类与抽象方法

    抽象:abstract    是具体的反义词    和模糊,不确定,不清晰有的类似       1.什么情况下会用到抽象?    当我们在声明一个父类时,某个/些方法的实现不清楚,或者说无法给出具体的 ...

  5. Java 抽象类和抽象方法的使用

    抽象类 关键字:abstract 概述:         使用abstract关键字修饰的类就是抽象类 特点: 抽象类不能创建对象,主要是来给子类继承的 抽象类和普通类的区别: 1.普通类可以创建对象 ...

  6. java 编写抽象类Animal,JAVA 抽象类,抽象方法

    抽象类其实就是给他的所有子类定义了一套模板.子类可以在这个模板上进行扩展. 通过抽象类,可以严格的限制了子类的设计. 如一个抽象类Animal中有一个抽象方法run. public class Ani ...

  7. java 定义抽象变量_Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都 ...

  8. JAVA基础13-Java抽象方法、抽象类、抽象之模板方法模式

    文章目录 Java抽象方法和抽象类 抽象之模板方法模式 Java抽象方法和抽象类 抽象类: Java中可以定义没有方法体的方法,该方法由子类来具体实现.这个没有方法体的方法我们称之为抽象方法,含有抽象 ...

  9. java中的抽象类和抽象方法

    知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...

最新文章

  1. Selenium3自动化测试——12.上传文件功能
  2. Ethernet/IP 学习笔记六
  3. 14、MySQL位运算符
  4. hibernate_day03_MySQL数据库-表与表之间的多对多关系-实例
  5. MapReduce源代码浅析
  6. CodeForces - 1141ESuperhero Battle简单模拟
  7. 【原创】SharePoint中如何判断任务是否已经延期
  8. 使用JAVA爬取网页图片
  9. 10-10-020-简介-kafka的ZK上面的存储
  10. Installation of Requests
  11. 平安京因服务器升级维护什么意思,阴阳师4月27日维护更新公告 堀江由衣猫掌柜降临平安京...
  12. xp mysql 5.6安装版下载地址_xp系统安装版下载,xp系统安装版下载地址
  13. 不使用羊角曲线绘制G2圆角
  14. Fortunate Finds
  15. Android BitmapFactory.decodeResource()方法参数代表什么意思
  16. 公钥密码体系基于的数学难题
  17. react-native Error installing Flipper-Glog
  18. MongoDB查询数据
  19. 华硕飞行堡垒7(FX95GT)配置风扇快捷键
  20. 11招教你做好 ERP 系统维护

热门文章

  1. VBA读取excel文件
  2. mac安装hbuilderX插件
  3. pgsql 设置用户权限
  4. 异业联盟与联盟卡结合——商家实现共享资源,用户享受消费优惠
  5. html中加页眉,在打印HTML页面时添加页眉/页脚
  6. 中国高校面临集体破产
  7. PSINS初始对准方法
  8. 基于 STM32 的 RFID 射频计数标签物联网ONENET平台全套资料
  9. 28335学习笔记4——F28335之3*3按键控制(包含按键消抖和按键检测方法介绍)
  10. java语言与面向对象清华大学pdf_清华大学出版社-图书详情-《Java语言与面向对象程序设计》...