在进入正题前我们先看一个问题:
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 创建实例的时候要注意参数.
分享到:
相关推荐
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
Java 基础知识大全 本资源摘要信息是 Java 基础知识大全的总结,涵盖了 Java 语言的基本概念、特点、历史发展等方面的知识点。以下是本资源摘要信息的详细内容: 一、 Java 语言的特点 * 面向对象:Java 语言是...
java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。
### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)的James Gosling等人于1991年...无论是初学者还是经验丰富的开发者,对Java基础知识的深入理解和实践都是提升编程技能的关键。
java基础知识的培训ppt,对于java初学者来说可以有一些作用。
java基础知识
JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结
Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...
在《JAVA基础知识精华总结》中,我们可以期待涵盖以下几个关键领域: 1. **Java语法基础**:包括基本的数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制(如条件语句if-else、循环for、...
Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...
【Java基础知识概述】 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1991年发起的“绿色项目”孕育而生,最初名为Oak。尽管最初的项目目标并未实现,但Java作为一种面向...
### Java基础知识总结(绝对经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人所开发的Oak语言,原计划用于控制嵌入式设备如有线电视交换盒和个人数字助理(PDA)。1994年...
java基础知识点总结及面试问题java基础知识点总结及面试问题java基础知识点总结及面试java基础知识点总结及面试问题
Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...
java基础知识点,面试宝典,最适合你的java面试知识点,所学java知识点总结
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...
Java基础知识.pdf