`
sd4886656
  • 浏览: 88663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

子类实例化时的超类的构造方法问题

 
阅读更多

 

class Animal{
Animal(){
System.out.println("Animal's constructor ");
}
Animal(int num){
System.out.println("Animal's constructor"+num);
}
}
class Mankind extends Animal{
Mankind(){
System.out.println("Mankind's constructor ");
}
Mankind(int num){
System.out.println("Mankind's constructor"+num);
}
}
public class kids extends Animal{
kids(){
System.out.println("Mankind's constructor ");
}
kids(int num){
System.out.println("Mankind's constructor"+num);
}
public static void main(String[] args){
System.out.println("start kids'constructor");
Kids3 someKid1=new Kids3();
Kids3 someKid2=new Kids3(999);
System.out.println("end kids'constructor");
}
}

 

这个例子中,Kids继承了Mankid,Mankid继承了Animal.形象的说,Animal是爷爷,Mankind是父亲,Kids3是儿子.可以看到,在Kid3 somekid1=new Kid3()创建对象时,Kids并不立刻运行自己的构造方法,而是首先输出其爷爷不带参数的构造方法,然后是父亲不低参数的构造方法,最后才是自己不带参数的构造方法(Kids真孝顺啊).在Kid3 somekid2=new Kid3(999)创建对象时,当然,它调用自己带参数的构造方法,可是它不到用其父亲和爷爷的带参数构造方法,而是仍然调用其爷爷和父亲不带参数的构造方法!可以这样理解,Kid3somekid2=new Kid3(999)只是指出超类不带参数的构造方法,但是不能指出要调用超类的哪个构造方法,所以只能调用超类不带参数的构造方法了.因为Kids创建对象时,不管是否带参数,都会自动调用超类不带参数的构造方法,所以,如果把超类Animal和Mankind的不带参数构造方法删除,那么上面的程序就会出现编译错误.解决这个问题有连个方法,其中一个是把超类Animal和Mankind的所有构造方法删除,这样系统会为它们提供不带参数的默认构造方法,另外一个方法就是在Kid3中使用super(int num)调用超类中的带参数的构造方法.

 

 

分享到:
评论

相关推荐

    javascript面向对象三大特征之继承实例详解

    本文实例讲述了javascript面向对象三大特征之继承。分享给大家供大家参考,具体...① 子类实例可以共享超类属性和方法。 ② 子类可以覆盖和扩展超类属性和方法。 继承的分类 在JavaScript中是不支持类的概念,使用构

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    p1 调用缺省的构造方法(即没有参数),p2 则调用带参数的构造方法。p1、p2 分别对 应于不同的内存空间,它们的值是不同的,可以完全独立地分别对它们进行操作。虽 然 new 运算符返回对一个对象的引用,但与 C、C++中的...

    【04-面向对象(上)】

    •创建一个子类实例时,总会先调用最顶层父类的构造器。 多态性 •Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类  型决定,运行时的类型由实际...

    JAVA程序的设计试题A卷.doc

    ( ) 7、在同一类中可以有具有以下声明的两个方法: void method1(int j,int k)和int method2(int k,int j) ( ) 8、一个类的子类可以是某些其它类的超类 ( ) 9、当超类引用变量指定为对子类的引用时,只能访问超类中...

    java经典面试2010集锦100题(不看你后悔)

    C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类构造方法并传参。 D) 以上说法都不正确。 题目11:d 程序如下: class Test { private int day; public int...

    JavaSE-11-Developer_1Z0-819:JavaSE-11-Developer_1Z0-819

    else和switch语句Java面向对象的方法声明和实例化Java对象(包括嵌套的类对象),并解释对象的生命周期(包括创建,通过重新分配取消引用和垃圾回收) 定义和使用字段和方法,包括实例,静态和重载方法使用实例和...

    java面试800题

    1.调用超类的构造方法; 2.由初始化语句对给变量进行初始化; 3.执行构造方法的体。" Q0055 系统运行时的最小单位是什么? 线程 Q0056 Java的编码规范? Q0057 Java的命名规范? Q0058 一个Java抽象类声明了一个...

    java二八杠源码-java-II-notes:java-II-notes

    java二八杠源码Java 程序员级别 II 第 1 部分:Java 类设计 第 1 项:使用访问修饰符:private、protected、public...如果您的方法覆盖了其超类的方法之一,则可以通过使用关键字 super 来调用被覆盖的方法。 (也访问

    程序员需要经常刷题吗-simple-java-zh-CN:SimpleJava是Java常见问题的集合。中文翻译

    子类和超类的构造函数? 4个访问级别 何时使用私有构造函数? 4.1 集合 ArrayList vs. LinkedList vs. Vector HashSet 与 TreeSet 与 LinkedHashSet HashMap vs. TreeMap vs. HashTable vs. LinkedHashMap 按值排序...

    AIC的Java课程1-6章

     弄清构造函数和终结方法在继承层次结构中的调用顺序,强调子类必须调用超类的构造函数分配空间和初始化超类数据。  掌握方法重写(override)的基本要求。  理解和使用关键字final。  理解包的...

    JSTL详细标签库介绍

    异常是超类Exception继承的子类,主要如何处理“未扑获的异常”,无法预料的异常。 <BR>8、 异常处理在java中原理:<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>异常处理有Method调用者的调用者或者Method调用者来...

    霸屏天下源码java-java-notes:笔记

    超类变量可以访问子类对象 :check_mark_button: Java 支持的继承类型 :check_mark_button: super在继承中的使用 :check_mark_button: 方法覆盖 :check_mark_button: 动态方法调度 :check_mark_button: 抽象类 :check...

Global site tag (gtag.js) - Google Analytics