精华内容
下载资源
问答
  • idea启动编译类型无法转换错误

    千次阅读 2018-12-26 15:21:58
    https://bbs.csdn.net/topics/391836701
    展开全文
  • java学习之编译类型和运行时类型

    千次阅读 2016-06-27 21:22:53
    编译类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译类型是Person,运行时类型是Student。  说明一下编译类型和运行时类型:  Java的引用变量有两...

    Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:

    编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译时类型是Person,运行时类型是Student

        说明一下编译时类型和运行时类型:

        Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。

        如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,

        或者被称为向上转型,由系统自动完成。

        引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法

       因此,编写Java代码时,引用变量只能调用声明该变量所用类里包含的方法。

       与方法不同的是,对象的属性则不具备多态性。通过引用变量来访问其包含的实例属性时,

        系统总是试图访问它编译时类所定义的属性,而不是它运行时所定义的属性。

    展开全文
  • java编译类型和运行时类型

    千次阅读 2016-11-27 13:16:42
     Java的引用变量有两个类型,一个是编译类型,一个是运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译类型和运行时类型不一致,会出现所谓的多态。因为...

    编译时类型和运行时类型:  

        Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。

        引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法(意思是说:编写代码时,只能调用父类中具有的方法,如果子类重写了该方法,运行时实际调用的是运行时类型的该方法。程序在编译时,会在编译类型中检查是否具有所调用的方法,如果编写代码时,使用引用变量调用子类中的特有方法,或者调用重载了父类中的方法,而父类中找不到该方法,则会报编译错误),因此,编写Java代码时,引用变量只能调用声明该变量所用类里包含的方法。与方法不同的是,对象的属性则不具备多态性。通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时所定义的属性。转换。
    ——要访问子类中特有的方法和属性,在编写代码时,则必须进行类型转换。

     —— 以上摘自《疯狂Java讲义》

    1.子类方法覆盖父类方法( 子类重写父类中的方法,调用子类中的方法)


    1. class Father{
    2. public void method(){
    3. System.out.println("父类方法:"+this.getClass());
    4. }
    5. }
    6. public class Son extends Father{
    7. public void method(){
    8. System.out.println("子类方法:"+this.getClass());
    9. }
    10. public static void main(String[] args){
    11. Father instance = new Son();
    12. instance.method();
    13. }
    14. }

          运行结果:

          子类方法:class Son

          2. 子类没有重写父类中的方法,所以到父类中寻找相应的方法

      1. class Father{
      2. public void method(){
      3. System.out.println("父类方法:"+this.getClass());
      4. }
      5. }
      6. public class Son extends Father{
      7. public static void main(String[] args){
      8. Father instance = new Son();
      9. instance.method();
      10. }
      11. }
        1. 运行结果: 父类方法: class Son

              3.动态绑定只是针对对象的方法,对于属性无效。因为属性不能被重写

          1. class Father{
          2. private String name = "Father'name";
          3. }
          4. public class Son extends Father{
          5. public String name = "Son'name";
          6. public static void main(String[] args){
          7. Father instance = new Son();
          8. System.out.println(instance.name);
          9. }
          10. }
            1. 运行结果:Father'name这里还可以从另外一个方面来说明:如果将Father类的[java]view plaincopyprint?
              1. public String name = "Father'name"; 修改为


                1. private String name = "Father'name"; System.out.println(instance.name);
                  1. 那么编译器将报错: 错误: Father中privatename不可以访问

                    1. 说明在System.out.println(instance.name);这行代码执行时,访问的是父类的 name属性,而该属性被声明为private,所以无法访问,因而报错!

                          下面在分析一个例子:

                      1. class A
                      2. {
                      3. int count = 20;
                      4. }
                      5. class B extends A
                      6. {
                      7. int count = 200;
                      8. }
                      9. public class Test
                      10. {
                      11. public static void main(String[] args)
                      12. {
                      13. A a = new A();
                      14. System.out.println(a.count);
                      15. B b = new B();
                      16. System.out.println(b.count);
                      17. A ab = b; //向上转型
                      18. System.out.println(ab.count);
                      19. }
                      20. }
                      21. 运行结果 : 20
                      22. 200
                      23. 20 结果分析:

                            前两行的输出毫无疑问,问题在

                            A ab = b;

                            System.out.println(ab.count);

                            的输出是20,而不是200;在这之间我们可以用

                            System.out.println(ab == b);

                            来进行简单的判断,结果输出为 true ,说明 ab 和 b 两个引用变量指向同一个实例,既然 ab 和 b 指向同一个实例,为什么输出的是20不是200呢?原因在于:

                            1.对于 class A 和class B来说,class B是class A的子类,由于子类的变量并不会覆盖父类的变量,所以实际上在class B中是存在来两个count,在这分别记作 A.count 和B.count ;

                            2.虽然在 class B中存在A.count 和B.count ,但是究竟输出那一个 count ,取决于该引用变量的声明时类型(本文开头红色文字部分已经说明),此处 声明时类型 是 class A,所以输出 20 即A.count ,同理若改为 B ab = b ;则输出 200 即 B.count 


    展开全文
  • Java编译类型和运行时类型

    千次阅读 多人点赞 2018-09-03 21:44:22
    编译类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定 如果两种类型不一致,就会出现多态,因此就会将子类对象之间赋值给父类引用变量,称为向上转型,而不用进行类型转换。如 ...

    一、前言

    最近在做笔试题的时候,才看到有这么一个知识点,查了好几篇博客,在这里记录一下


    二、是什么

    Java引用变量有两个类型,一个是编译时类型,还有一个是运行时类型

    编译时类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定

    如果两种类型不一致,就会出现多态,因此就会将子类对象之间赋值给父类引用变量,称为向上转型,而不用进行类型转换。如 Animal a = new Bird(),其中引用变量 a 的编译时类型是 Animal,运行时类型是 Bird,两者不一致,因此出现多态

    当使用该对象引用进行调用的时候,有这么一条规则,对象调用编译时类型的属性和运行时类型的方法

    我们直接看一个例子来验证这句话

    class Person {
        public String name;
    
        public Person() {
            name = "person";
        }
    
        public void show() {
            System.out.println("person show");
        }
    }
    
    class Woman extends Person {
        public String name;
    
        public Woman() {
            name = "woman";
        }
    
        public void show() {
            System.out.println("woman show");
        }
    }
    
    public class TestDemo {
    
        public static void main(String[] args) {
            Person person = new Person();
            System.out.println(person.name);
            person.show();
    
            System.out.println();
    
            Person person1 = new Woman();
            System.out.println(person1.name);
            person1.show();
    
            System.out.println();
    
            Woman woman = new Woman();
            System.out.println(woman.name);
            woman.show();
        }
    
    }
    

    结果:

    person
    person show
    
    person
    woman show
    
    woman
    woman show
    

    从结果可以看出,第一条语句 person 引用调用的属性属于 Person 类,person 引用调用的方法还是 Person 类;之后以此类推


    三、参考

    https://blog.csdn.net/snow_7/article/details/51579278
    https://blog.csdn.net/qq_29513537/article/details/60765552
    https://blog.csdn.net/qq_23419401/article/details/52064871#java

    展开全文
  • 编译类型和运行时类型到底是什么?

    千次阅读 多人点赞 2017-03-07 15:23:24
    我一直都对这个编译类型和运行时类型很迷惑,百度了很多讲的都很浅显大都如下: Java的引用变量有两个类型,一个是编译类型,一个是运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给...
  • 在Java中编译类型和运行时类型

    千次阅读 2018-03-14 13:52:03
    在Java中,引用变量有两种类型,一种是编译类型,一种是运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。列如:Zoology zoo=new Dog();(Dog是Zoology的子类),zoo...
  • 首先来看看Java中的编译类型与运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类...
  • 编译类型检查与运行时类型检查

    千次阅读 2018-11-07 17:38:08
    编译编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有...
  • Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型编译类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译类型是Person,...
  • Maven编译报不兼容类型

    千次阅读 2017-04-20 00:07:26
    Maven编译报不兼容类型,怎么办?
  • file - setting - compiler
  • 一、前言 Android系统在编译时,在执行lunch操作时,会让用户选择编译类型:eng、user、userdebug。 二、编译类型的区别 区别见下图: 三、其它 上图摘自《深入解析Android5.0系统》,page 31。
  •  Java的引用变量有两个类型,一个是编译类型,一个是运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译类型和运行时类型不一致,会出现所谓的多态。因为...
  • 转载链接如下:https://blog.csdn.net/u013298353/article/details/17676959编译编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上...
  • 编译原理4种文法类型

    千次阅读 2016-09-05 13:46:13
    通过对产生式的施加不同的限制,Chomsky把文法分为4种类型    首先定义一个产生式  α→β 0型文法定义: 0型文法(PSG): α∈(VN∪VT)* ,且至少含一个VN β∈(VN∪VT)* 对产生式没有任何...
  • 编译原理(三)类型检查

    千次阅读 2018-01-24 20:52:54
    静态检查中最典型的部分——类型检查: 类型系统、类型检查、多态函数、重载 忽略其它的静态检查:控制流检查、唯一性检查、关联名字检查 上面不能在不该出现continue的地方出现continue。 C语言: ...
  •  Java的引用变量有两个类型,一个是编译类型,一个是运行时类型编译类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译类型和运行时类型不一致,会出现所谓的多态。因为...
  • 另外编程语言除了编译型和解释型,还有静态语言、动态语言、强类型语言、弱类型语言。那么每种语言类型是什么样子的呢,下面让我们来看看吧。  但是在此之前,我们需要先了解一下计算机原因的发展史,从低级语言到...
  • c++11 编译类型判断

    千次阅读 2018-06-24 18:26:46
     这里说明一下为什么会有这样的结果,首先第一个编译时由于c++的编译时选择性,发现第一个模板类符合要求所以返回true,第二个编译时由于参数不是同一个类型所以选择了false_type。type_traits头文件中还有很多类似...
  • 概念区别 【编译型语言与解释型语言、动态类型语言与静态类型语言、强类型语言与弱类型语言】 文章目录一、编译型语言与解释型语言二、动态类型语言与静态类型语言三、强类型语言与弱类型语言总结 一、编译型语言与...
  • 以下是在论坛中看到的两种解释:(1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多...#endif 如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相...
  • (3.0和2.0语法不同,如果安装3.0以上版本的protobuf,在编译的时候应该需要增加啥~~~) 编译安装步骤: 1. 安装 protobuf 依赖项, 其依赖于autoconf、 automake、 libtool ,使用brew info 检查是否安装,如果...
  • C#中的运行时类型编译类型

    千次阅读 2006-09-05 18:08:00
    今天在看C#参考时明白了 什么是C#的运行时类型编译类型,记录下来,以备查阅:相信很多刚学C#的人都对这两个概念感到迷惑,其时并不难(以前太重于技术可用性,比如:asp.net中的DataDrid怎么用等问题,没大...
  • 编译通过,但是装上手机后(前提,先签名),android的图片文件 发生黑条,后来调试源代码发现时一个listview的背景图片 图片格式为 .9.png图片。原因是.9图片没有编译 把.9.png写成了 .9.PNG 。 eclipse...
  • 关于编程语言的静态类型、动态类型编译型以及解释型的区别目录用 [TOC]来生成目录:关于编程语言的静态类型动态类型编译型以及解释型的区别目录 静态类型和动态类型的区别 编译型和解释性的区别 Java语言是静态...
  • 以下是在论坛中看到的两种解释: (1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_...如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相同。(相同为c,不同为c++。详
  • 编译原理中的四种类型文法

    千次阅读 热门讨论 2015-09-27 20:31:52
    编译原理中的四种类型文法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,500,614
精华内容 600,245
关键字:

编译类型