继承和接口的用处
重写是Java中多态的一种表现,举例说明:
public class Father{
public void hitChild(){
System.out.println("又不听话,看我怎么收拾你。");
}
}
public class F1 extends Father{
public void hitChild(){
System.out.println("打一拳。");
}
}
public class F2 extends Father{
public void hitChild(){
System.out.println("踢一脚。");
}
}
public class F3 extends Father{
public void hitChild(){
System.out.println("扇一个嘴巴。");
}
}
public class Test{
public static void main(String args[]){
Father father;
father=new Father();
father.hitChild();
father = new F1();
father.hitChild();
father = new F2();
father.hitChild();
father = new F3();
father.hitChild();
}
}
运行结果:
C:\java>java Test
又不听话,看我怎么收拾你。
打一拳。
踢一脚。
扇一个嘴巴。
Java中没有多继承,即一个类不能同时继承多个类。但一个类可以同时实现多个接口,如下:
public class F implements Father1,Father2,Father3{ }
接口有利于代码功能的扩展(增加新的功能)。而继承则有利于代码功能的修改(把旧的功能改成新的功能)。这里旧功能的修改和新功能的增加前提是保留旧类源码,旧的功能仍然可以使用。
接着上面的继承举例:上面例子中的子类我们统称为一代子类
一. 用继承修改旧的功能
现在如果一代子类F1的功能——“打孩子”,也就是方法hitChild()里边的功能实现有问题,我们要把具体实现修改掉,那么我们可以重新写一个新的二代子类F11继承自一代子类F1,并重写其hitChild()方法。
//二代子类
public class Son11 extends Son1{
//重写父类“打孩子”方法
public void hitChild(){
System.out.println("我是二代子类对此方法的新实现");
}
}
二. 用接口实现增加新的功能
类F1已经有了“打孩子”功能,而我们有了新的需求,要给它增加一个新功能“宠孩子”(新方法pet()),而旧的代码不能动。那么我们可以定义一个新的接口(PetInterFace),接口里定义这个方法pet()的声明。再重新写一个二代子类F11,让它先继承类F1,同时实现接口 PetInterFace,并实现接口里的 pet()方法。
//新接口
public interface PetInterFace{
//新方法
public void petChild();
}
//二代子类
public class F11 extends F1 implements PetInterFace{
//实现接口方法
public void petChild(){
System.out.println("父亲很爱我!");
}
}
这样这个二代子类F11即有了老的功能hitChild(),又有了新的功能petChild()。