抽象一直以来都是人们所神往的艺术形式,这点从梵高,毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感,颇有一种虚无缥缈只可意会不可言传的意味。但是JAVA中的抽象类与抽象方法相对而言就更加直接了,它给我的感觉更像是文章的副标题,本身不发挥什么作用,但是却可以从中展开许多功能。

用关键字abstract修饰的类称为abstract类(抽象类),比如:

abstract classA{

}

用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:

abstract int min (int x,int y);

对于abstract方法只允许声明,不允许实现(因为没有方法体)(毕竟叫抽象,当然不能实实在在的让你实现),并且不允许使用final和abstract同时修饰一个方法或者类,也不允许使用static修饰abstract方法。也就是说,abstract方法只能是实例方法,不能是类方法。

既然abstract类和方法这么特殊,我们就必须对比一下它和普通类与方法之间的区别了:

1.abstract类中可以有abstract方法

abstract类中可以有abstract方法,也可以有非abstract方法

非abstract类中不可以有abstract方法

2.abstract类不能使用new运算符创建对象

但是如果一个非抽象类是抽象类的子类,这时候我们想要创建该对象呢,这时候它就必须要重写父类的抽象方法,并且给出方法体,这也就是说明了为什么不允许使用final和abstract同时修饰一个类或者方法的原因。

重点常考!:final和abstract,private和abstract,static和abstract,这些是不能放在一起的修饰符,因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能够继承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。

3.abstract类的子类

如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,也就是去掉abstract方法的abstract修饰,并给出方法体。

如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

下面举个例子:

abstract class GirlFriend{                                //抽象类,封装了两个行为标准

abstract void speak();

abstract void cooking();

}

class ChinaGirlFriend extends GirlFriend{

void speak(){

System.out.println("你好");

}

void cooking(){

System.out.println("水煮鱼");

}

}

class AmercanGirlFriend extends GirlFriend{

void speak(){

System.out.println("hello");

}

void cooking(){

System.out.println("roast beef");

}

}

class boy{

GirlFriend friend;

void setGirlFriend(GirlFriend f){

friend=f;

}

void showGirlFriend(){

friend.speaking();

friend.cooking();

}

}

public class text{

public static void main(String args[]){

GirlFriend girl =new ChineseGirlFriend();      //这里girl是上转型对象

Boy boy=new boy();

boy.setGirlFriend(girl);

boy.showGirlFriend();

girl=new AmericanGirlFriend();             //girl 是上转型对象

boy.setGirlFriend(girl);

boy.showGirlFriend();

}

}

abstract 类和 abstract 方法 (抽象类与抽象方法)相关推荐

  1. Java笔记之abstract类和abstract方法

    Java笔记之abstract类和abstract方法 抽象类中的抽象方法,可以由子类去实现,即行为标准的实现由子类完成. 例如,人具有 run 行为,或 speak 行为,但仅仅说出行为标准,不要说 ...

  2. 笔记 16 abstract类和abstract方法

    abstract 类 用关键字abstract修饰的类称为abstract类(抽象类). abstract class A{ ........ } 用关键字abstract修饰的方法称为abstrac ...

  3. Java学习之子类(八):abstract类和abstract方法

    在设计程序的时候,我们会经常使用abstract类,原因是,abstract类只关心操作,而不关心这些操作具体的实现细节 细节应当由抽象类的非抽象子类去实现,这些子类可以给出具体的实例,来完成程序功能 ...

  4. Java中abstract类和abstract方法

    用关键字abstract修饰的类称为abstract类(抽象类).如: abstract class A {abstract int min(int x,int y); } 用关键字abstract修 ...

  5. 5.9 abstract 类和abstract 方法

    abstract 类和abstract 方法 (1)用关键字abstract修饰的类称作abstract类(抽象类) //抽象类格式: abstract class A{ ··· } (2)用关键字a ...

  6. abstract类和abstract方法的理解

    abstract类和abstract方法(抽象类和抽象方法) 定义:用关键字abstract修饰的类称为abstract类(抽象类) 应用理解:抽象类可以理解为事务的行为标准,提供模板,该行为标准用抽 ...

  7. 抽象类和抽象方法 abstract类和abstract方法

    可以使用abstract来修饰一个类或者方法. 用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法. 抽象类不能被实例化. 抽象方法是只有方法声明 ...

  8. Java中abstract类和abstract方法的相关问题

    当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义. 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法. 抽象类存在 ...

  9. abstract类和abstract方法

    上一篇文章:Java中的继承(二) 抽象类.抽象方法 使用abstract修饰的类称之为 abstract类(抽象类) 使用abstract修饰的方法称之为 abstract方法(抽象方法) abst ...

最新文章

  1. 浅析Mysql Join语法以及性能优化
  2. ssm项目jsp加载不出来图片_16. SSM 搭建
  3. 计算机网络是通信技术和,计算机网络是计算机技术和通信技术相结合的产物。()...
  4. unix改变shell显示颜色
  5. 一个程序员的水平能差到什么程度
  6. mongodb 备份压缩_MongoDB的备份与恢复
  7. ImportError: No module named ‘Tkinter‘
  8. rac ogg to mysql_RAC环境下OGG的HA问题请教!
  9. Hyperledger Fabric 架构 处理交易流程 账本
  10. 个人博客 修改markdown代码块背景颜色
  11. Edge浏览器安装Tampermonkey插件
  12. Redis源码学习(11),t_hash.c 学习(二),hget 相关命令学习
  13. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
  14. Android软件TOP10排行榜
  15. 文件随机重命名的方法
  16. eNSP配置VLAN
  17. 基于OpenSSL的CA建立及证书签发(签发多域名/IP)
  18. IMSI,SN,IMEI分别是什么意思
  19. kubeadm方式搭建k8s集群
  20. Web渗透测试对靶机注入shell(phpMyAdmin)

热门文章

  1. 爱奇艺RND框架介绍及在PC客户端的应用实践
  2. 微信小程序自定义顶部背景
  3. 唯美简洁的DEDECMS小清新文章博客/CMS/织梦模板
  4. 迪士尼在上海发布的限量版手机
  5. Excel中几个常见文本函数使用
  6. C#-连接oracle数据库
  7. 软件开发中的分工协作思考与VO、PO…
  8. 数据库之查询数据记录
  9. Roboguide软件安装
  10. 原生js —— 表单验证练习(12306注册)