1、如果一个父类中的某个方法,所有的子类都有不同的实现,那么该方法就应该定义成抽象方法,所以该方法就是抽象类
2、如果是针对于一种功能(一种类额外增加的特殊功能),而且这个功能和类本身的定义没有什么关系,可以被不同的类使用,那么这个功能可以定义到接口中,再用这个类去实现。
例如:
public abstract class Dog{ // 吼叫 抽象方法 // 吃饭 抽象方法 } public interface JiDu{ // 缉毒 抽象方法 } public class JiDuDog extends Dog implements JiDu{ // 重写吼叫,吃饭方法 // 实现缉毒的方法 ---- 缉毒方式 } 缉毒猪,缉毒猫,缉毒候....
//定义缉毒接口 缉毒的词组(anti-Narcotics)比较长,在此使用拼音替代 interface JiDu{ //缉毒 public abstract void jiDu(); } //定义犬科,存放共性功能 abstract class Dog{ //吃饭 public abstract void eat(); //吼叫 public abstract void roar(); } //缉毒犬属于犬科一种,让其继承犬科,获取的犬科的特性, //由于缉毒犬具有缉毒功能,那么它只要实现缉毒接口即可,这样即保证缉毒犬具备犬科的特性,也拥有了缉毒的功能 class JiDuQuan extends Dog implements JiDu{ public void jiDu() { } void eat() { } void roar() { } } //缉毒猪 class JiDuZhu implements JiDu{ public void jiDu() { } }
分析:
由于犬分为很多种类,他们吼叫和吃饭的方式不一样,在描述的时候不能具体化,也就是吼叫和吃饭的行为不能明确。当描述行为时,行为的具体动作不能明确,这时,可以将这个行为写为抽象行为,那么这个类也就是抽象类。
可是有的犬还有其他额外功能,而这个功能并不在这个事物的体系中 , 例如 : 缉毒犬。缉毒的这个功能有好多种动物都有 , 例如 : 缉毒猪 , 缉毒鼠。我们可以将这个额外功能定义接口中 ,让缉毒犬继承犬且实现缉毒接口 , 这样缉毒犬既具备犬科自身特点也有缉毒功能。
-
额外的功能---> 在接口中定义,让实现类实现
-
共性的功能---> 在父类中定义,让子类继承
总结:
-
-
如果可以确定的通用功能,使用默认方法
-
如果不能确定的功能,使用抽象方法
-
-
共性的功能---> 在父类中定义,让子类继承
-
如果可以确定的通用功能,使用默认方法
-
-