您的位置:首页 > 编程语言 > Python开发

java中多态以及python动态语言

2015-12-19 14:07 591 查看
java中的多态
1、什么是多态
java引用变量有两个类型,一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的编译类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现多态。(通过一个父类能够引用不同的子类)

2、如何实现多态
java中实现多态有三个必要条件:继承、重写、向上型

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。(当子类重写父类的方法被调用时,只有对象继承链中的最末端的方法才会被调用。)

但是向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了。

指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,哪怕是重载(方法名相同,但参数不同)该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

public class Wine {  

    public void fun1(){  

        System.out.println("Wine 的Fun.....");  

        fun2();  

    }  

      

    public void fun2(){  

        System.out.println("Wine 的Fun2...");  

    }  

}  

  

public class JNC extends Wine{  

      

    public void fun1(String a){  

        System.out.println("JNC 的 Fun1...");  

        fun2();  

    }  

      

      

    public void fun2(){  

        System.out.println("JNC 的Fun2...");  

    }  

}  

  

public class Test {  

    public static void main(String[] args) {  

        Wine a = new JNC();  

        a.fun1();  

    }  

}  

-------------------------------------------------  

Output:  

Wine 的Fun.....  

JNC 的Fun2...  

3、多态的好处
1.应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。(即继承,将派生类的公共功能、属性写入基类)
2.派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。(例如,方法传入的参数用基类表示,这样就不用为每个不同参数的相同发放重复写多次)
好处就是可以解耦合,比如你需要一个List类,你可以这样实例化ArrayList list = new ArrayList();
也可以List list = new ArrayList();
那么现在的问题来了 现在的需求是ArrayList已经无法满足你的要求了,你需要换成LinkedList,如果按照第一种写法那么你需要做的工作可能比较多了,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法LinkedList是没有的,这倒也及加多了你的工作量。
如果你按第二种方式来实现,那么你只需将List list = new LinkedList()即可,你无须在担心之前所调用的方法
。 当然现在更好的做法,是把List list;通过spring来修改的,这样的话就完全不需要改变代码了,也就符合设计原则的几大思想了。

4、python中的多态性


多态即多种形态,在运行时确定其状态,在编译阶段无法确定其类型,这就是多态。Python中的多态和Java以及C++中的多态有点不同,Python中的变量是弱类型的,在定义时不用指明其类型,它会根据需要在运行时确定变量的类型(个人觉得这也是多态的一种体现),并且Python本身是一种解释性语言,不进行预编译,因此它就只在运行时确定其状态,故也有人说Python是一种多态语言。在Python中很多地方都可以体现多态的特性,比如内置函数len(object),len函数不仅可以计算字符串的长度,还可以计算列表、元组等对象中的数据个数,这里在运行时通过参数类型确定其具体的计算过程,正是多态的一种体现。有些朋友提出Python不支持多态,我是完全不赞同的.
Python以它这种独有的方式体现多态的根本原因我觉得有两点:1)Python是解释性语言;2)Python中变量是弱类型的。所以Python体现多态的方式和Java决然不同,但是不能因为同Java中体现多态的方式不同就认为Python不支持多态,这种想法过于片面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: