- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java抽象和多态
1 java抽象类在继承中,抽象是一个非常重要的概念。类可以是抽象的,方法也可以是抽象的。建议:从继承开始,一直使用一个例子不断扩展。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。如形状类是抽象的类,圆、三角形等是具体类。用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。但是抽象类中不一定有抽象方法。在面向对象的概念中,知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。使用关键字abstract定义抽象类,一般语法:[访问权限] abstract class 类名 {成员列表}public abstract class Shapes {public abstract void draw();}public abstract class Shapes {public void draw(){ //具体代码 }}要强调,只要一个类不应该有具体对象,就应该是抽象类,不一定是有抽象方法的。抽象类的相关概念用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。抽象类可以有成员属性和非抽象的成员方法。抽象类不能被实例化,但可以有构造函数。抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类。抽象类可以有构造方法,但不能直接实例化,只能用来继承;抽象类的派生子类应该提供对其所有抽象方法的具体实现;如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;抽象类中也可以包含有非抽象的方法,子类中重写非抽象方法时返回值和参数必须与父类一致;构造方法和静态方法不可以修饰为abstract。2 java抽象方法有时候,父类中的某一个方法,每一个子类都要去重写。这种情况下,父类中的这个方法,就没有必要有方法体,因为子类都不会直接使用,都要重写。很多学员会觉得既然这样,那么父类中就不应该声明这个方法。要强调,软件工程中,往往是要有需求分析,设计,再到编码。在设计阶段,设计人员要想办法让程序员知道某些类中应该实现哪些功能的,也就是what to do。父类往往都是设计人员设计的。因此不能把这样的方法删除掉,如果删除,就没有办法约束子类必须实现这些方法。这种时候,就把父类中的这样的方法的方法体去掉,就成为抽象方法。抽象方法定义了what to do,而how to do在子类中实现。在某些情况下,类无法(或者没有必要)提供方法的具体实现,可以将此方法声明成抽象方法;在类中没有方法体的方法,就是抽象方法;含有抽象方法的类,一定是抽象类。抽象方法只需声明,而不需实现某些功能使用关键字abstract声明抽象方法,一般语法:[访问权限] abstract 返回值类型方法名称(参数列表);public abstract void draw();抽象方法的作用就是定义How to do,而what to do留到子类去实现在面向对象编程中,抽象是一个非常重要的概念。作为初学者,首先就是要理解抽象类,抽象方法的使用和作用。抽象最核心的作用是用来实现应用的可扩展性。抽象的作用在面向对象领域,抽象类主要用来进行类型隐藏;也就是使用抽象的类型来编程,但是具体运行时就可以使用具体类型。利用抽象的概念,能够在开发项目中创建扩展性很好的架构,优化程序。抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能。创建抽象类银行账户,定义抽象方法存款、取款,创建两个子类现金账户类、信用卡账户类,实现抽象方法,定义不同的逻辑。写测试类测试相关方法。package com.chinasofti.inherit.bak.account;public abstract class Account { private String id; private double balance; public Account() { System.out.println(Account()); } public Account(String id, double balance) { this.id = id;
文档评论(0)