• java语言中的多态概述


    多态:一个对象相应着不同类型

    多态在代码中的体现:父类或接口的引用指向其子类对象。

    多态的优点:

    提高了代码的扩展性,前期定义的代码能够使用后期的内容。

    多态的弊端:

             前期定义的内容不能使用后期子类中定义的特有内容。

    多态的前提:

    1,必须有关系,(继承。实现)。

    2,要有覆盖。


    Animal a =new Cat();

    自己主动类型提升,猫对象提升了动物类型。可是特有功能无法訪问。能够限制对特有功能的訪问。

    专业讲:向上转型。将子类型隐藏。就不能使用子类的特有方法。

    假设还想用详细动物猫的特有功能,能够将该对象进行向下转型。目的是为了使用子类中的特有方法。

    Cat c = (Cat)  a;

    注意:对于转型,自始至终都是子类对象在做着类型的变化。

    if (a instanceof Cat){
    	Cat c=(Cat)  a;
    }
    


    instanceof:用于推断对象的详细类型(类或是接口)。仅仅能用于引用数据类型推断。

    通常在向下转型前用于健壮性的推断。

    多态时,成员的特点:

    1。成员变量

    编译时:參考引用型变量所述的类中是否有调用的成员变量,有,编译通过,没有编译失败。

    执行时:參考引用型变量所述的类中是否有调用的成员变量,并执行该所属类中的成员变量。

    简单说:编译和执行都參考等号左边。

    2,成员函数(重点)非静态

    编译时:參考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。

    执行时:參考的是对象所述的类中是否有调用的函数。动态绑定

    简单说:编译看左边,执行看右边。

    样例:

    class Outer 
    {
    	void method(){
    		Object obj =new Object(){
    			public void show(){
    				System.out.println("show run");
    			}
    		};
    		obj.show();//错误提示,找不到符号
    //由于匿名内部类这个子类对象被向上转型成了Object类型。这样就不能再使用子类的特有方法了
    	}
    }
    class InnerClass
    {
    public static void main(String [] args)
    	{
    		new Outer().method();
    	}
    }
    

    3,静态函数

    编译时:參考引用型变量所述的类中是否有调用的静态方法,有,编译通过。没有编译失败。

    执行时:參考引用型变量所述的类中是否有调用的静态方法。

    简单说:编译和执行都看左边。

    事实上对于静态方法,是不须要对象的。直接用类名调用就可以。








  • 相关阅读:
    [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
    [BZOJ3230] 相似字串 后缀数组+RMQ
    [BZOJ4556][Tjoi2016&Heoi2016]字符串 后缀数组+主席树
    [BZOJ4044]Virus synthesis 回文自动机的DP
    [BZOJ2055]80人环游世界 有上下界最小费用最大流
    [BZOJ2502]清理雪道 有上下界网络流(最小流)
    [BZOJ2095][Poi2010]Bridges 最大流(混合图欧拉回路)
    [BZOJ2288&BZOJ1150]一类堆+链表+贪心问题
    [BZOJ4820]硬币游戏 KMP+高斯消元
    [BZOJ1559]密码 AC自动机+状压
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6961989.html
Copyright © 2020-2023  润新知