定义一个集合set 为 abstract class
部分代码如下:
public abstract class FSet {
//定义 abstract method
abstract boolean isEmptyMethod();
//定义static method
public static boolean isEmpty(FSet s) {
return s.isEmptyMethod();
}
}
public class EmptySet extends FSet {
boolean isEmptyMethod() {
return true;
}
}
public class Include extends FSet {
boolean isEmptyMethod() {
return false;
}
}
为什么要定义一个static 方法 然后去调用 abstract 方法? 这样做的目的是什么?
直接用子类去override 父类方法 有什么缺陷吗?
一般abstract都是根据需求来的,,当然了,,目前是教给你原理,,所以就忽略了现实需求,,你现在的想法就和小学学数学一样。。比如数学书举例,一边放水一边接水,你会觉得编写教材的人是傻子吗?同样的道理,,。。
言归正传。。。abstract定义的抽象方法的意义是 定义一个所有属于这个类的子类都必须实现的接口。 比如人都有工作,但是父类是没有办法实现子类的工作细节的。所以定义一个job的abstract方法,这样子类就必须取实现这个方法了,,然后父类可以写一个getJob方法,getJob调用job方法,这样就不必关注子类对象是什么了,,只要子类实现了这个方法,,那么消费者只需要关注getJob即可。。
目的:创建类去继承这个抽象类,然后实现抽象方法isEmptyMethod以后类就有了判空的方法,不管是定义的private属性还是其他的都可以判断。
直接用子类去override 父类方法 ,本身并没什么缺陷,如果创建的实例是父类的实例实现的就是父类的方法。同理,子类就是子类的方法。个人想法,如有问题,多谢指正
子类实现抽象方法,这样不同的子类对这个抽象方法有不同的实现,客户程序只需保持对子类对象的父类引用即可而无需关心具体的子类到底是哪个,这样就实现了多态调用。