黑马程序员技术交流社区
标题:
【已解决】对抽象类抽象方法存在意义的疑惑
[打印本页]
作者:
郑文博
时间:
2012-6-7 10:54
标题:
【已解决】对抽象类抽象方法存在意义的疑惑
本帖最后由 郑文博 于 2012-6-7 13:25 编辑
做练习时的感受
/*
抽象类练习
*/
abstract class Employee
{
private String name;
private String id;//员工id,包含部门信息故不用int
private double pay;
Employee(String name,String id,double pay)
{
this.name =name;
this.id =id;
this.pay =pay;
}
public abstract void work();
}
class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus =bonus;
}
public void work()
{
System.out.println("manager work");
}
}
复制代码
第17行public abstract void work();作为抽象方法写入。而当Manager类继承这个抽象类时对 work() 方法必须要重新复写,那么就只在子类中写这个方法不就好了,为什么父类还要定义一个必须被复写的抽象方法呢?不明白它存在的意义啊。
还有一个小问题是定义变量为字符串类型时 String 为什么要大写第一个字母,double,int型怎么就不用大写首字母呢?
------------------------------编辑后分隔---------------------------------
多谢大家了!
作者:
刘克方
时间:
2012-6-7 11:00
本帖最后由 刘克方 于 2012-6-7 11:06 编辑
抽象类定义的抽象方法,非抽象子类必须实现;抽象类是一些类共性的抽取,既然你继承该抽象类必须有这些共性,这是强制性的;也是抽象类的作用
至于String 首字母为什么大写,因为它是对象类型的数据,其他事基本类型,其他也有对应的对象数据类型如int 对象是Integer;大小写这是java的书写规范
作者:
姚玉鹏
时间:
2012-6-7 11:05
定义一个抽象方法 就是限定继承的子类一定要实现则个方法 如你的 public abstract void work();
double int 是基本类型 而String 属于类 跟Character Integer 一样
作者:
马林贺
时间:
2012-6-7 11:15
我的理解
如果父类是抽象类,那么你继承了,就必须要覆写里面的抽象方法,
假如你定义了动物的抽象类, 动物都会 吃东西吧, 但是不同的动物吃的东西也会不一样,
所以你在定义 吃 这个方法的时候,你不能再 父类里面具体实现吧,只能是通过子类的覆写,类实现自己的 吃 的方法
为什么要定义在父类里面,因为是通过子类向上抽取的共同特点。
作者:
付信榕
时间:
2012-6-7 11:16
在父类定义抽象方法是强迫其子类去具有并实现这个方法。在这里如果没有父类中public abstract void work(); 那么经理子类就可工作可不工作了,反正都是公司的员工了,不工作依然有工资。所以为了避免拿工资不干活的现象,父类就定义了public abstract void work(); 想要成为经理员工必须干活,不然不要进入本公司。这就是它存在的意义。
double,int,boolean float byte char short long 八大基本类型和void都是小写,其他类按照类名书写不默认规定:每个单词开头大写来写。所以String就是这个样了。八大基本类型对应的包装类都是大写字母开头Double Integer Boolean Float Byte Character Short Long.
作者:
黄克帅
时间:
2012-6-7 12:38
本帖最后由 黄克帅 于 2012-6-7 12:47 编辑
其实 这也算是一个编程模式,即面向抽象编程,面向接口编程。
你操作的只是那个抽象类或接口(一般接口用的多),至于其子类是怎么实现的你不用不管。有助于程序的扩展性。
比如楼上说了动物吃东西,定义一个抽象的动物类,不同的动物,有不同的吃法。只要他们继承这个类,你就只需要操作这个抽象类就可以,具体怎么吃,你不用去管。如果还有一个动物加进来,你也只需要实现这个类,实现可以是别人写的,你完全可以不管,但是你操作的对象还是不变,还是那个抽象类。就有助于程序的扩展。
还没有 不知道你发现没有,我们要用到jdk提供的很多功能的时候,就需要去继承类或实现接口,他就是在里面定义了方法让你去重写,你具体怎么写的它不管,但是掉用的方式都一样,这样对程序的扩展有很大的帮助。还有很多标准也是类似这样定义的,一个接口,让使用的人去实现,具体怎么实现它不管。但是你要用,就得实现我这个接口。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2