abstract关键字
来源:互联网 发布:java多线程查询数据库 编辑:程序博客网 时间:2024/06/05 07:32
abstract抽象的意思。想一个银行的账户系统(定期账户和活期账户)。对于定期活期账户来说,它们都有不同的利息计算方式。我们如何来实现呢?
一种解决的方式是:写一个账户类,写两个子类,一个定期账户子类,一个活期账户子类。但是父类账户中的方法有该如何来写呢?即使可以写,很显然不可能写所有子类满足子类的方法吧!如果让子类重写父类的方法,很显然也得满足重写的条件。就是方法名相同,返回类型相同,参数列表相同。试想一下,两个之类能够重写同样一个父类的某个方法吗?在某种意义下,这种参数列表相同的概率是很小的啊,如果还有其他的账户,有该如何呢?显然这种方式是不行的啊。毕竟在写当前的账户的时候,还要考虑的将来的是否会有新的账户,如何能够扩展,而不至于影响到当前的账户。一定要符合开闭原则。
既然父类中写计算利息的方法是不好写的。那就索性不写了。这时候我们引入abstract关键字。这个关键字的引入,很好地解决的上述的问题。
abstract 可以修饰类和方法,代表未实现的方法或者不可实现的类。类的不可实现就是用该类的方法无法创建对象。
抽象类的写法
public abstract class A{ }
抽象方法的写法
public abstract 返回值类型 方法名(参数列表)[抛出异常];
抽象方法的结束是以分号结束的而不是大括号,也就是说是用分号代替大括号。抽象的方法是没有内容的,所以抽象的方法不能够调用。因为调用的时候,虚拟机不知道该做什么。
抽象类的两个特点:
1)可以申明抽象类型的变量。
2)抽象类不能用new来调用构造,创建对象(抽象类的构造是存在的)。
顺便提一下,只有匿名内部类没有构造。
上面提到了两点,抽象类不能创建对象,抽象的方法没有构造。
例如A一个抽象类,B是抽象类的一个子类。
A s = new B(); //这是一段发生多态的代码,但是跟平常的多态不一样
抽象类的一个引用执行的是一个非抽象子类的对象。抽象类中抽象方法的实现一定要依赖与之类重写来实现。
现在有两句非常重要的话,他告诉了我们抽象类和抽象方法的一些约定:
1)抽象类当中未必含有抽象的方法。
2)抽象的方法所在的类一定是抽象类。
我们可以证明第二点:实现一个抽象的方法,是不能够呗虚拟机调用的。如果他写在了非抽象类当中。显然这个类可以通过new关键字来创建一个对象。而创建的这个对象,是可以调用类里面的说有public方法的,但是调用了这个抽象的方法的时候,虚拟机去不知道要做什么,很显然这是不符合逻辑的。所以抽象方法一定放在抽象的类中。
我们用图类描述一下类和方法的关系:
抽象的类就是用来被继承的,抽象的方法是用来被重写的。
抽象的好处:
1)定义了一种规范。
2)抽象具有强制性。在子类重写抽象父类的抽象方法是时候是有体现的。
所有的抽象类的引用都指向了一个非抽象子类的一个对象。
//模板设计模式public abstract class Account { //含有抽象方法的类,是抽象类private double money = 1000;public abstract double get();//抽象类中可以没有抽象方法public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}}public class DAccount extends Account{public double get(){return getMoney()*0.03;}}public class HAccount extends Account{public double get(){return getMoney()*0.02;}}public class Test1 {public static void main(String[] args) {Account s1 = new DAccount();Account s2 = new HAccount();System.out.println(s1.get());System.out.println(s2.get());}}
上边的代码编写格式被称为是模版设计模式。
abstract不能与static同时来修饰一个方法。因为static修饰的一些东西都是在类加载的时候放到内存中的,是先与对象的穿件的。而abstract修饰的方法是用来呗子类重写的,想想。static修饰的东西先于对象的创建,而子类重写该方法的时候,很想让子类得继承抽象的父类。而 子类中的方法只有在创建对象的时候才放在内存当中。由于时间上有很大的差异,所以,static和abstract是不能同时修饰一个方法的。
- abstract关键字
- abstract关键字
- abstract关键字
- abstract关键字
- Abstract关键字
- abstract关键字
- 关键字abstract
- abstract关键字
- abstract关键字
- abstract关键字
- Java中的Abstract关键字
- Java 关键字abstract详解
- C#关键字 - Abstract
- abstract Java 关键字
- C#之关键字abstract
- Java 关键字abstract详解
- Java 关键字abstract
- C#的abstract关键字
- C++中string相关函数 操作
- membership入门学习(三)
- Notification和NotificationManager的使用(二)
- ARM7---LCD1602---液晶显示驱动
- C++字符串函数 (转)作者:mousekitty
- abstract关键字
- MFC中 滑动条控件 Slider Control 的添加
- gdb print 输出写到文件里 --- tee 命令可以解决
- WF 中使用WorkflowApplication出错
- CentOS6修改Apache默认根目录
- 称赞大乘功德经
- SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)
- android系统图片裁剪
- 利用光纤磁盘阵列实现存储共享