abstract 类和 abstract 方法 (抽象类与抽象方法)
抽象一直以来都是人们所神往的艺术形式,这点从梵高,毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感,颇有一种虚无缥缈只可意会不可言传的意味。但是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 方法 (抽象类与抽象方法)相关推荐
- Java笔记之abstract类和abstract方法
Java笔记之abstract类和abstract方法 抽象类中的抽象方法,可以由子类去实现,即行为标准的实现由子类完成. 例如,人具有 run 行为,或 speak 行为,但仅仅说出行为标准,不要说 ...
- 笔记 16 abstract类和abstract方法
abstract 类 用关键字abstract修饰的类称为abstract类(抽象类). abstract class A{ ........ } 用关键字abstract修饰的方法称为abstrac ...
- Java学习之子类(八):abstract类和abstract方法
在设计程序的时候,我们会经常使用abstract类,原因是,abstract类只关心操作,而不关心这些操作具体的实现细节 细节应当由抽象类的非抽象子类去实现,这些子类可以给出具体的实例,来完成程序功能 ...
- Java中abstract类和abstract方法
用关键字abstract修饰的类称为abstract类(抽象类).如: abstract class A {abstract int min(int x,int y); } 用关键字abstract修 ...
- 5.9 abstract 类和abstract 方法
abstract 类和abstract 方法 (1)用关键字abstract修饰的类称作abstract类(抽象类) //抽象类格式: abstract class A{ ··· } (2)用关键字a ...
- abstract类和abstract方法的理解
abstract类和abstract方法(抽象类和抽象方法) 定义:用关键字abstract修饰的类称为abstract类(抽象类) 应用理解:抽象类可以理解为事务的行为标准,提供模板,该行为标准用抽 ...
- 抽象类和抽象方法 abstract类和abstract方法
可以使用abstract来修饰一个类或者方法. 用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法. 抽象类不能被实例化. 抽象方法是只有方法声明 ...
- Java中abstract类和abstract方法的相关问题
当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义. 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法. 抽象类存在 ...
- abstract类和abstract方法
上一篇文章:Java中的继承(二) 抽象类.抽象方法 使用abstract修饰的类称之为 abstract类(抽象类) 使用abstract修饰的方法称之为 abstract方法(抽象方法) abst ...
最新文章
- 浅析Mysql Join语法以及性能优化
- ssm项目jsp加载不出来图片_16. SSM 搭建
- 计算机网络是通信技术和,计算机网络是计算机技术和通信技术相结合的产物。()...
- unix改变shell显示颜色
- 一个程序员的水平能差到什么程度
- mongodb 备份压缩_MongoDB的备份与恢复
- ImportError: No module named ‘Tkinter‘
- rac ogg to mysql_RAC环境下OGG的HA问题请教!
- Hyperledger Fabric 架构 处理交易流程 账本
- 个人博客 修改markdown代码块背景颜色
- Edge浏览器安装Tampermonkey插件
- Redis源码学习(11),t_hash.c 学习(二),hget 相关命令学习
- PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
- Android软件TOP10排行榜
- 文件随机重命名的方法
- eNSP配置VLAN
- 基于OpenSSL的CA建立及证书签发(签发多域名/IP)
- IMSI,SN,IMEI分别是什么意思
- kubeadm方式搭建k8s集群
- Web渗透测试对靶机注入shell(phpMyAdmin)