---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
今天学习了Java多态的相关知识。知道了多态指的是事物的多种形态,在代码里体现在出现Fu f = new Zi();(其中Zi类继承Fu类)的情况。
其中需要注意的是,多态成员函数(非静态)的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。在运行时期:参阅对象所属的类中是否有调用的方法。也就是说如果Zi类中有覆写Fu类的成员函数,那么通过父类引用调用的是子类覆写之后的成员函数。如果调用子类特有的成员函数, 则不能通过编译。
成员变量和静态方法的特点:
无论编译和运行都参考左边,也就是引用型变量所属的类。静态成员函数也如此。
这种情况在实际开发遇到的不多,因为静态成员一般不需要覆盖,成员变量也无需覆盖。
接口也可以多态,接口型引用指向自己的子类,这种情况在实际开发中特别适用,大大提高了程序的可扩展性,下边就主板程序可扩展多种PCI卡的实例来说明:
public class Test {
//主程序这里通过调用mb.add()即可添加不同的PCI卡
public static void main(String[] args) {
MainBoard mb = new MainBoard();
mb.run();
mb.add(new SoundCard());
}
}
public class MainBoard {
//主板类
public void run(){
System.out.println("MainBoard run..");
}
public void add(PCI pci){//这里的参数是PCI接口的引用,体现了多态性,凡是实现了PCI接口的对象都可以
pci.start();
pci.stop();
}
}
public interface PCI {//PCI接口
public void start();
public void stop();
}
public class SoundCard implements PCI{
@Override
public void start() {
System.out.println("SoundCard start..");
}
@Override
public void stop() {
System.out.println("SoundCard stop..");
}
}
我总结了一下,在需要扩展的地方定义一个接口,该接口定义了此处的通用功能,接受此接口引用的参数。需要扩展的类实现该接口,并将此类对象传递给该接口的引用,即利用多态性优化了程序代码。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net