如题!
解决方案 »
- java se中 Display是什么意思
- 出错在哪里?
- RuntimeException和非RuntimeException的区别, who can tell me ??
- 加急,我的java源程序在src\com下,请教如何编译并打包,谢谢
- 对于Java初学者,我应如何学习?
- 关于《thinking in java》和JAVA类库
- 高手们!java怎么和XBase数据库进行连接
- 一个书上的例子程序,觉得很垃圾,请帮我看看
- JBuilder下如何制作类似Console程序,或者说如何设置弹出的那个对话框参数?
- 今天是我的生日,而且还和她在一起,开心,散分!!!!
- 阅读《Java核心开发技术从入门到精通》时,遇到的问题:这个语句是什么意思…
- 多线程数据加锁
abstract void f();
这个方法是不完整的,仅有申明没有方法体。那么就变成了抽象类,如果一个类包含一个或多个抽象方法,那么此类就必须限定为abstract的,否则编译器会报错。由于抽象类的不完整(抽象方法的不完整造成的)就不能产生该类的对象,编译器就会产生报错。abstract class Instrument{
public abstract void play();
}class Wind extends Instrument{
public void play(){
System.out.println("Hello Wind!");
}
}public class Music{
public static void tune(Instrument i){
i.play();
}
public static void main(String[] args){
Wind w = new Wind();
tune(w);
}
}上面的输出结果为:
Hello Wind!如果将Instrument的class前面abstract除掉就会产生编译错误:
Instrument 不是抽象的,并且未覆盖 Instrument 中的抽象方法 play()当Music类中生成Instrument类时,看看编译能不能通过:public class Music{
public static void tune(Instrument i){
i.play();
}
public static void main(String[] args){
Wind w = new Wind();
tune(w);
}
}结果编译报错:
Instrument 是抽象的;无法对其进行实例化纵上可以得到,所谓“抽象”的引入是为了防止我们产生错误(或者说正确设计合适的类,没有实际意思的类可以将其“抽象”),而且为继承类提供统一接口。
子类“会计”的工作就是“算账”
子类“程序员”的工作就是“编写程序”这时“员工”类就应该做成抽象类,它的 doWork 方法是抽象的
我开始学Java的时候,是看马士兵的视频,然后自己开始跟着写个坦克大战,写完后受益匪浅,然后我开始进行游戏的继续开发,我想做一个物品系统,比如吃到加血的物品,吃到无敌的物品等等,这时,抽象类就有用了。
首先,定义一个物品类,物品有一个使用效果的方法,可是不同物品的效果不一样啊,所以定义为抽象方法,以后每个具体的物品都继承它,写具体的实现方法就好了。到这,楼上的内容结束了
你可能会说,大不了我每个物品里都单独写个实现方法就好了啊。
这种方法是可以,但是,还有点要注意,比如,所有的物品都需要和坦克碰撞才会触发使用效果,那么,每个物品都要有个碰撞方法,而且都是一样的内容,如果每次都单独写到具体的物品类中,那就太冗余了。所以我把碰撞方法写成抽象类中的一个非抽象方法里,那么,以后每个具体物品继承后,就直接拥有碰撞方法了,而不用重复的写了。这样,一个抽象类,既解决了一定会出现的不确定的方法,也解决了必要的方法。这应该就是抽象类最大的优势了。
我的Java经验只有2年,这是我的理解,有不对的地方,还望大牛们指正。
在我的例子中,你可以这么认为:老板一个一个地请员工到他的办公室谈话,谈完之后老当然要让员工回去继续工作。这时,在老板的眼里,所有的员工都是一个类型,那就是基类“员工”,在他看来,只要是他的员工,就可以调用 doWork() 方法,这件事不必关心员工的具体类型。