精华内容
下载资源
问答
  • java中的多态和继承,编译看左边运行看右边 口诀: 成员变量,静态方法看左边(成员变量和静态方法编译运行看左边);非静态方法:编译看左边运行看右边。 解释: 在多态中,向上转型和向下转型有很多的...

    java中的多态和继承,编译看左边,运行看右边

    口诀:

    成员变量,静态方法看左边(成员变量和静态方法编译和运行都看左边);非静态方法:编译看左边,运行看右边。

    解释:

    在多态中,向上转型和向下转型有很多的应用。
    1: 类型提升,向上转型
    Animal c = new Cat();
    在编译时:参阅引用型变量所属类中是否有调用的方法。如果有。编译通过,没有编译失败
    在运行时:参阅对象所属类中是否有调用方法。
    简单一句话:成员函数在多态时,编译看左边,运行看右边。
    2: 如果想要调用猫的特有方法,如何操作?
    强制将父类的引用,转成子类类型。向下转型

    Cat c = (Cat)a;
    c.catchMouse();
    

    3: 在多态中,调用子类函数,子类方法必须覆盖父类中的方法,如果调用子类特有的方法,就必须向下转型了。
    这样非静态的方法可直接调用。
    在多态中,成员变量的特点:
    无论编译和运行,都参考左边(引用型变量所属的类,)
    在多态中,静态成员函数的特点:
    无论编译和运行,都参考做左边。

    》》》博主长期更新学习心得,推荐点赞关注!!!
    》》》若有错误之处,请在评论区留言,谢谢!!!

    展开全文
  • 1.Java多态——编译看左边运行看右边 成员变量、静态方法看左边;非静态方法,编译看左边运行看右边。 当父类变量引用子类对象的时候,即Fu f = new Zi();在这个引用变量f指向的对象中,它的成员变量和静态方法...

    1.Java多态——编译看左边,运行看右边

    成员变量、静态方法看左边;非静态方法,编译看左边,运行看右边
    当父类变量引用子类对象的时候,即Fu f = new Zi();在这个引用变量f指向的对象中,它的成员变量和静态方法与父类是一致的;它的非静态方法,在编译的时候与父类是一致的,运行时与子类是一致的(发生了复写)。
    Fu

    package com.itcast_06;
    
    public class Fu {
        int num = 5;
        static void method1(){
            System.out.println("fu类中的method1");
        }
        void method2(){
            System.out.println("fu类中的method2");
        }
    }
    
    

    zi

    package com.itcast_06;
    
    public class Zi  extends Fu{
        int num = 8 ;
        static void method1(){
            System.out.println("zi method1");
        }
        void method2(){
            System.out.println("zi method2");
        }
    }
    
    

    DuoTaiDemo

    package com.itcast_06;
    
    public class DuoTaiDemo {
        public static void main(String[] args){
            Fu f = new Zi();
            System.out.println(f.num);//5,与父类一致
            f.method1();//fu类中的method1,与父类一致
            f.method2();//zi method2,编译时与父类一致,运行时与子类一致
            Zi z = new Zi();
            System.out.println(z.num);//8,与zi类中的method一致
            z.method1();//zi method1
            z.method2();//zi method2
        }
    }
    
    

    输出结果

    5
    fu类中的method1
    zi method2
    8
    zi method1
    zi method2
    

    2.分析

    Fu f =new Zi();
    首先了解变量Fu到底是什么,把这句话分两段:Fu f;这是声明一个变量f为Fu这个类,知道了f肯定为Fu类。然后我们f = new Zi();中创建一个子类对象赋值给了f,结果是什么?结果是拥有了被Zi类函数覆盖后的Fu类对象f。

    也就是说只有子类函数覆盖了父类函数这一个变化,但是肯定是Fu这个类,也就是说f不可能变成其他比如Zi这个类等等。所以f代表的是函数被复写后(多态的意义)的一个Fu类,而父类原有的成员变量没有任何变化。即成员变量编译和运行都看Fu。

    但是对于f的Fu类函数被复写了,非静态方法编译看Fu,运行看Zi。

    对于静态方法:编译和运行都看Fu。因为对静态变量而言,Fu类的所有函数都跟随Fu类加载而加载了。也就是Fu类的函数是先于对象的创建之前就已经存在了,无法被后出现的Zi类对象所复写,所以没有发生复写现象。

    展开全文
  • 编译看左边运行看右边

    千次阅读 2012-11-18 03:00:58
    很多人在初学java时可能都听过一句话:编译看左边运行看右边。那么,这句话到底什么意思呢?甭着急,我们来一起瞅瞅。

    背景

    很多人在初学java时可能都听过一句话:编译看左边,运行看右边。那么,这句话到底什么意思呢?

    甭着急,我们来一起瞅瞅。

    代码

    先来看父类:

    /**
     * 本文原创作者:谷哥的小弟
     * 作者博客地址:http://blog.csdn.net/lfdfhl
     */
    public class Father {
    	public int age = 45;
    	public String getMessage() {
    		String string = "I like you";
    		return string;
    	}
    }

    再来看子类: 

    /**
     * 本文原创作者:谷哥的小弟
     * 作者博客地址:http://blog.csdn.net/lfdfhl
     */
    public class Son extends Father {
    	public int age = 23;
    	@Override
    	public String getMessage() {
    		String string = "Just do it";
    		return string;
    	}
    	
    	public void play() {
    		System.out.println("happy day");
    	}
    }
    

    要点概述:

    1、Son继承自Father

    2、Son重写了父类的getMessage( )方法

    3、Son类中拥有自身特有的play( )方法

    OK,至此我们完成了父类和子类的代码编写。最后,我们来进行测试。

    /**
     * 本文原创作者:谷哥的小弟
     * 作者博客地址:http://blog.csdn.net/lfdfhl
     */
    public class Test {
    
    	public static void main(String[] args) {
    		Father father = new Son();
    		int age = father.age;
    		System.out.println(age);
    		String message = father.getMessage();
    		System.out.println(message);
    		//error code
    		//father.play();
    	}
    
    }

    分析

    看完示例后,我们再来看看"编译看左边,运行看右边"是什么含义?

    当存在继承时,我们通常会使用父类引用指向子类对象,例如:

    Father father = new Son();

    在这句代码中等号的左边是父类引用,等号的右边是子类的对象。

    接下来,我们可以使用father对象调用方法。

    在编译阶段会去检查父类引用(在等号的左边)是否拥有该方法。

    例如:father.getMessage( );可以通过编译,因为Father类中有方法getMessage( )

    例如:father.play( );不可以通过编译,因为Father类中没有方法play( )

    以上,就是常说的"编译看左边"。

    在通过编译后执行代码时实际调用的是子类对象(在等号的右边)的方法。

    例如:father.getMessage( );打印的是Just do it 而不是 I like you

    以上,就是常说的"运行看右边"。

    问题

    为什么 int age = father.age; 的值是45而不是23呢?

    因为:成员变量不具备多态性。成员变量的值取决于引用所属的类

     

    展开全文
  • 多态——"编译看左边运行看右边

    千次阅读 多人点赞 2017-05-23 19:56:45
    "编译看左边运行看右边"(多态执行)   (对面向对象语言中理解多态、继承很有帮助~~~)   老毕在讲到多态执行问题时,结合下面的例子,给我们总结了一套口诀:“成员变量,静态方法看左边;非静态...

    "编译看左边,运行看右边"(多态执行)

     

    (对面向对象语言中理解多态、继承很有帮助~~~)

     

    老毕在讲到多态执行问题时,结合下面的例子,给我们总结了一套口诀:“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();

    ),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。

    例:

    class Fu {

     intnum = 5;

    static void method4() {

     System.out.println("fu method_4");

     }

    void method3() {

     System.out.println("fu method_3");

     }

    }

    class Zi extends Fu {

     intnum = 8;

    static void method4() {

     System.out.println("zi method_4");

     }

    void method3() {

     System.out.println("zi method_3");

     }

    }

    class DuoTaiDemo4 {

     public static void main(String[] args) {

    Fu f = new Zi();

     System.out.println(f.num);//与父类一致

     f.method4();//与父类一致

     f.method3();//编译时与父类一致,运行时与子类一致

      Ziz = new Zi();

     System.out.println(z.num);

     z.method4();

     z.method3();

     }

    }

    输出结果:

    5

    fu method_4

    zi method_3

    8

    zi method_4

    zi method_3

     

     

    个人分析:

    Fu f = new Zi();----------首先了解变量F到底是什么,把这句子分2段:Fu f;这是声明一个变量f为Fu这个类,那么知道了f肯定是Fu类。然后我们f=newZi();中建立一个子类对象赋值给了f,结果是什么??

    结果是,拥有了被Zi类函数覆盖后的Fu类对象----f------。

     

    -------------------------------------------也就是说:

    只有子类的函数覆盖了父类的函数这一个变化,但是f肯定是Fu这个类,也就是说f不可能变成其他比如Zi这个类等等(突然f拥有了Zi类特有函数,成员变量等都是不可能的)。所以f所代表的是函数被复写后(多态的意义)的一个Fu类,而Fu类原来有的成员变量(不是成员函数不可能被复写)没有任何变化----------------获得结论:A:成员变量:编译和运行都看Fu。

    但是f的Fu类函数被复写了。--------------获得结论:B:非静态方法:编译看Fu,运行看Zi

    对于静态方法:编译和运行都看Fu!!

    其实很简单,首先我们要理解静态情况下发生了什么?

    ----------------当静态时,Fu类的所有函数跟随Fu类加载而加载了。也就是Fu类的函数(是先于对象建立之前就存在了,无法被后出现的Zi类对象所复写的,所以没发生复写,那么获得:C:静态方法:编译和运行都看Fu。

    展开全文
  • "编译看左边运行看右边"(多态执行) 含义: Animal c = new Cat(); 左边是 Animal 类(或接口) 右边是 Cat()类; 在编译的时候编译器不管你右边是什么类,只要左边的Animal类(或接口)能编译通过就不会报错。但是...
  • 涉及知识点:类加载过程、多态。 文章最后定义了Percent 和Children 类有如下功能, 对静态代码块、构造代码块、构造方法在字...对于成员方法:编译看左边运行看右边。 对于成员变量:编译运行看左边。也就是成...
  • 老毕的"编译看左边运行看右边"(多态执行)   (对面向对象语言中理解多态、继承很有帮助~~~) 在多态中,成员变量的特点: 无论编译运行,都参考左边(引用型变量所属的类) 在多态中,静态成员函数的...
  • java中的继承是面向对象程序设计的一大特征,子类继承了父类的所有方法和成员变量,如果不对方法进行重写或对成员变量进行重新赋值,那么子类可以直接调用父类中的方法或...这就是“编译看左边运行看右边”。  
  • 分析:根据“非静态方法:编译看左边运行看右边”,运行的是new Demo(),这时由于子类复写了父类的方法show(),所以调用子类的方法,结果返回false,当运行到f.show(“B”)时式子不成立了,所以跳出循环结束...
  • 非静态方法成员方法:编译看左边运行看右边 用下面的例子演示了上面的口诀: public class Fu { int a = 10; public static void staticMethod() { System.out.println("父类中的静态方法"); } void ...
  • 时常会在编程题里面看到这样类似的对象的定义:Animal f = new...非静态方法:编译看左边运行看右边。 具体来说就是:在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编...
  • Java基础——多态中的“编译看左,运行看右” ...也就是在编译期间看左边的类中有无该方法/属性,而实际在运行时执行的是右边类的方法/属性。如果编译期间没有在左边的类找到该非静态域,则会报编译错误。    举...
  • Java多态之编译看左,运行看左/右

    千次阅读 2018-10-10 10:39:57
    Java中多态的前提:  A:有继承关系  B:有方法重写(不是... B:成员方法:编译看左边,执行看右边。 多态的好处:提高了程序的扩展性  具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用...
  • VSCODE 一键编译运行

    万次阅读 2018-11-25 20:43:55
    VSCODE 一键编译运行 简述 vscode 的调试功能其实提供了一键编译运行的功能(ctrl+F5),但是启动特别特别慢… 又不想安装插件,后来发现vscode 提供了一个叫做 Task 的功能,下面我就来介绍一下怎么使用Task功能实现...
  • 123321是一个非常特殊的数,它从左边读和从右边读是一样的。  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式  输入一行,包含一个正整数n。 输出格式  按从小到大的...
  • 深入理解程序从编译运行

    万次阅读 多人点赞 2017-10-17 10:47:18
    From:... 从Hello World说程序运行机制:http://www.sohu.com/a/132798003_505868 C/C++中如何在main()函数之前执行一条语句?:https://www.zhihu.com/question/26031933 (深入理解计算机系统...
  • 一、问题:LNK2019 无法解析的...在编译OpenCV4.1过程中出现的问题。 二、可能的原因 主要是因为C/C++运行时找不到适当的程序入口函数, 一般情况下,在windows程序,那么WinMain是入口函数,在VS2015中新建项目为“...
  • 多态,运行时多态和编译时多态

    千次阅读 2016-04-14 21:22:01
    ...(对面向对象语言中理解多态、继承很有帮助~~~) ...老毕在讲到多态执行问题时,结合下面的例子,给我们总结了一套口诀:“成员...非静态方法:编译看左边运行看右边。”意思是:当父类变量引用子类对象时(Fu
  • 在VSCode内编译运行C++

    千次阅读 2018-10-04 14:21:31
    说到c++编译运行,大家第一个想到的应该是VS2015这种微软出的大型IDE,对于一些大型项目也确实应该使用VS这种大型的IDE,但是作为一个业余的爱好者,只是想使用c++来运行一些东西,比如一些算法问题,那么VS这种大型...
  • 编译期多态和运行期多态(JAVA版)  上一篇讲述了C++中的多态性,由于多态性是面向对象编程中常用的特性,所以JAVA作为面向对象的主流语言自然也有多态性,它的多态性其实和C++的概念差不多,只是实现形式和表现...
  • 如何在VSCode内编译运行C++?

    万次阅读 多人点赞 2016-12-21 18:44:59
    说到c++编译运行,大家第一个想到的应该是VS2015这种微软出的大型IDE,对于一些大型项目也确实应该使用VS这种大型的IDE,但是作为一个业余的爱好者,只是想使用c++来运行一些东西,比如一些算法问题,那么VS这种大型...
  • PiggyMetrics微服务编译运行解析

    千次阅读 2017-06-27 19:31:36
    这篇文章之前首先一下 基于PiggyMetrics微服务搭建的分布式系统这篇文章 还有这篇在Docker容器中运行Spring Boot应用 https://www.tianmaying.com/tutorial/spring-boot-docker 基于spring cloud的微服务...
  • 在VS2008中添加运行编译等按钮

    千次阅读 2013-04-11 21:32:53
    默认情况下,VS2008中的工具栏上没有运行按钮,...2、切换到Commands(命令)选项卡,在左边的目录下选择Debug(调试),然后在右边的列表中找到Start Without Debugging(开始运行不调试)。 3、把Start Without
  • 这篇文章主要在下面这篇文章的基础上,先是实现了一键编译和一键运行两个单个功能,最后又进一步使用Clion自带的Custom Build Application实现编译运行一键实现。 ... Clion采用cmake来构建项目并运行,对于单个cpp...
  • 在Windows下编译运行QuantLib

    千次阅读 2016-08-13 16:40:40
    摘要:QuantLib项目的目标是为金融领域的...可以运行其中的某个例子,看看结果。右键点击项目“Bonds”,点击“调试”->“启动新实例”,就能出来运行结果了。 下面读者可以在QuantLib基础上进行自定义开发了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,609
精华内容 29,443
关键字:

编译看左边运行看右边