文档章节

Java基础-类构造器继承

陶邦仁
 陶邦仁
发布于 2012/11/25 20:43
字数 441
阅读 467
收藏 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); 
      } 
}

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

© 著作权归作者所有

陶邦仁
粉丝 1715
博文 420
码字总数 1483963
作品 0
海淀
技术主管
私信 提问
加载中

评论(0)

【Java菜鸟学习总结】Java基础知识(类)

【Java菜鸟学习总结】Java基础知识(类) [TOC] 1、面向对象编程 1.1、面向对象编程的特征 1.2、类与对象概述 类与对象是面向对象的核心概念。 2、类 2.1、类的语法 2.2、类的关系 2.3、属性...

osc_a99nkwq0
2018/08/20
9
0
Java基础语法(11)-面向对象之关键字

title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用; 它在构造器内部使用,表示该构造器正在初...

BenCoper
04/03
0
0
Java基础知识(三)——面向对象(上)

类和对象 对一个类定义而言,可以包含三种最常见的成员:构造器、成员变量、方法,类里各成员之间的定义顺序没有任何影响,可以互相调用,但是static修饰的成员不能访问没有static修饰的成员...

osc_axql7nqi
2019/01/03
2
0
Thinking in Java 读书总结(三)

前言 TIJ第7,8,9章分别讲的是类的复用,多态和接口,这些特性在Java中不得不说都是特别特别重要的。之前校招面试的时候其实一直心里有个疑问,Java那么多底层特性真的工作上用得着么,不会...

osc_ett4kx6e
2018/08/19
2
0
2020年最新版Java面试题大全(文末附参考答案)

  前言 本套Java面试题大全总共分为以下这十三个模块:   Java基础知识面试题   Java异常面试题   JVM面试题   Spring面试题   Spring MVC面试题   Spring Boot面试题   Spr...

java进阶架构师
03/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

比较好用的自媒体分发工具是哪个?

正是源于互联网生态的健康发展,从15年开始到现在,自媒体文化产业特别有关注度,其品牌形象鲜明、优秀的转化能力的数不胜数的亮点,故而吸引着数不清的创作者,而为了达到更出彩的播放量,这...

易媒助手
29分钟前
38
0
idea2020.1 pojie

前几天最新版的idea2020.1终于发布了,它有多香相信小伙伴们已经有所耳闻。现在就拿出来分享给小伙伴们。   所需要的的东西放在这里了,同时里面也放了一个idea2020.1,小伙伴可以选择性的...

我喜欢你有用吗__
33分钟前
32
0
从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!

通过定时触发器,可以简单快速地定制一个企业微信机器人。我们可以用它来实现喝水、吃饭提醒等小功能,还能实现定时推送新闻、天气,甚至是监控告警的小功能。 使用企业微信机器人 在企业微信...

腾讯云Serverless
36分钟前
32
0
socket编程基础,从了解到实现

java生下来一开始就是为了计算机之间的通信,因此这篇文章也将开始介绍一下java使用socket进行计算机之间的通信,在上一篇文章中已经对网络通信方面的基础知识进行了总结,这篇文章将通过代码...

虹越云霄
36分钟前
41
0
Spring Enable***功能

spring博大精深,衍生出了两大系列:spring boot 和sping cloud快速业务开发模式。 我们进行具体开发时,经常看到这样以Enable*开头的注解,如图 等等好多例子。。。框架自带的Enable* @En...

董广明
38分钟前
41
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部