`
qinshanwu
  • 浏览: 73554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java基础知识

    博客分类:
  • java
阅读更多
   在进入正题前我们先看一个问题:
    
    public class ClassA {
        int i;
        public ClassA(int i){
                this.i = i;
        }

    }

    public class ClassB extends ClassA{
        int j;
        public ClassB(String j){
                this.j = Integer.parseInt(j);
        }
    }

classB编译无法通过,为什么?

在classA加一个无参构造函数编译又没问题,这又是为什么?


这个问题首先得说说类的初始化顺序:
      父类静态初始化---->子类静态初始化---->父类初始化块---->父类构造方法---->子类初始化块---->子类构造方法是
由上可知,在创建子类时,首先会调用父类的构造函数,当子类没有用super关键字指定调用哪一个函数时,默认的会调用父类的无参构造函数,由此可知问题出现在哪了:
     ClassB.java 继承了ClassA.java,但是在ClassB.java并没有指定调用父类ClassA.java的哪一个构造函数,此时虚拟机默认会调用ClassA.java的无参构造函数,此时问题就出来了,由于ClassA.java有一个有参的构造函数
      public ClassA(int i){
              this.i = i;
      }
但是确没有无参的构造函数,因此在编译时不会让它通过的.
改进的方法有多种:
1.calssA.java中加一个无参的构造函数,就变成如下:
public class ClassA {
        int i;
        public ClassA(){}
        public ClassA(int i){
                this.i = i;
        }

}

public class ClassB extends ClassA{
        int j;
        public ClassB(String j){
                this.j = Integer.parseInt(j);
        }
}
2.在cassB.java中的用super关键字指定调用父类的一个构造函数:
public class ClassA {
        int i;
        public ClassA(int i){
                this.i = i;
        }

}

public class ClassB extends ClassA{
        int j;
        public ClassB(String j){
                this.j = Integer.parseInt(j);
                super(j);
        }
}


还有一点说明一下,当一个类没有写任何构造函数时,虚拟机会自动加上一个无参的构造函数,当写了一个或多个时,不管有没有无参的构造函数,虚拟机此时都不会再自动加上任何构造函数,因此,在用new 创建实例的时候要注意参数.
1
0
分享到:
评论

相关推荐

    Java基础知识点总结.docx

    Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。

    java基础知识大全(必看经典)

    Java 基础知识大全 本资源摘要信息是 Java 基础知识大全的总结,涵盖了 Java 语言的基本概念、特点、历史发展等方面的知识点。以下是本资源摘要信息的详细内容: 一、 Java 语言的特点 * 面向对象:Java 语言是...

    java基础知识 ppt

    java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。

    Java基础知识总结.pdf

    ### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...

    java基础知识总结(很详细全面)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)的James Gosling等人于1991年...无论是初学者还是经验丰富的开发者,对Java基础知识的深入理解和实践都是提升编程技能的关键。

    java基础知识的培训ppt

    java基础知识的培训ppt,对于java初学者来说可以有一些作用。

    java基础知识总结

    java基础知识

    JAVA基础知识总结.

    JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结

    JAVA基础知识总结

    Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...

    java基础知识总结(经典)

    Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...

    第一讲 Java基础知识.ppt

    【Java基础知识概述】 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1991年发起的“绿色项目”孕育而生,最初名为Oak。尽管最初的项目目标并未实现,但Java作为一种面向...

    Java基础知识总结 (绝对经典)

    ### Java基础知识总结(绝对经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人所开发的Oak语言,原计划用于控制嵌入式设备如有线电视交换盒和个人数字助理(PDA)。1994年...

    java基础知识点总结及面试问题

    java基础知识点总结及面试问题java基础知识点总结及面试问题java基础知识点总结及面试java基础知识点总结及面试问题

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例.zip

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...

    java基础知识点总结

    java基础知识点,面试宝典,最适合你的java面试知识点,所学java知识点总结

    Java基础知识点和答案

    Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...

    Java基础知识.pdf

    Java基础知识.pdf

Global site tag (gtag.js) - Google Analytics