文档章节

Java基础-类构造器继承

陶邦仁
 陶邦仁
发布于 2012/11/25 20:43
字数 441
阅读 429
收藏 0

在Java中,经常使用到继承,子类从父类中可继承的域和方法。而关于构造器的构造器却和一般的继承有很大不同。以下面代码为例:

package Thinking; 
public class Father{ 
      public int n; 

      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){   //编译无法通过 隐含调用父类无参构造器
            System.out.println(msg); 
      } 
}

上述代码中,Son是Father的子类,父类有两个构造函数,一个参数为int,一个参数为String,而Son的构造函数和父类第二个构造函数一样。然而Son却无法通过编译,这是因为子类的构造器中隐含着对父类无参构造器的调用,若父类没有无参构造器,那子类必须在构造器中显式调用父类的其中一个有参构造器,否则无法通过编译

所以上述代码中,可以有两种解决办法。一是在父类添加一个无参构造器,二是在子类中添加一个对父类构造器的显示调用(super(param))。这样才可通过编译。

方法一:

package Thinking; 
public class Father{ 
      public int n; 

      public Father(){ 
            System.out.println("Father"); 
      } 
      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){ 
            System.out.println(msg); 
      } 
}

方法二:

package Thinking; 
public class Father{ 
      public int n; 


      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){ 
            super(msg); 
            System.out.println(msg); 
      } 
}

换句话说,当父类没有无参构造器时,子类无法使用系统默认的构造器,必须创建自己的构造器,无论是否有参数,同时要在子类构造函数中第一句调用父类的构造函数。

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1611
博文 420
码字总数 1483887
作品 0
海淀
技术主管
Java入门需掌握的30个基本概念

(1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。 (2)分布...

风一样
2011/08/03
0
0
【Scala】Scala高级使用技巧之二

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/82111814 1、重写field的提前定义 默认情况下,如果父类中的构造函数代码,用...

魏晓蕾
08/27
0
0
Java编程学习:继承的概念及方法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/30
0
0
Java继承与初始化全过程解析

Java初始化简介 一般来说,在Java中,每个类产生的编译代码都存在于它自己的独立文件中,该文件只有在使用程序代码时才会被加载,也就是说,类的代码只有在初次使用时才加载。但是,如果存在...

断桥残雪断桥残雪
2015/08/12
0
1
Java提高——对象与内存控制

实例变量和类变量 Java内存管理分为两个方面:内存分配和内存回收。 内存分配是特指创建Java对象时,JVM为该对象在堆内存中所分配的内存空间 内存回收是指当Java对象失去引用,变成垃圾时,J...

qq_30604989
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装rsync及两台机器进行文件同步

centos7安装rsync及两台机器进行文件同步 2017年12月21日 11:17:46 码农下的天桥 阅读数:2210 标签: centosrsync同步 更多 个人分类: 后端 所属专栏: 研发模式及运维 版权声明:本文为博...

linjin200
13分钟前
1
0
jpg、jpeg、png... 的区别

jpg、jpeg、png... 的区别 对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道。 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更...

DemonsI
32分钟前
4
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
37分钟前
2
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
49分钟前
1
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部