Java继承-子类不可以继承父类的构造方法

子类不可以继承父类的构造方法,只可以调用父类的构造方法。

子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。

super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。

一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。

这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。

因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。

public class Main {public static void main(String[] args) {Student s = new Student("Xiao Ming", 12, 89);}
}class Person {protected String name;protected int age;public Person(String name, int age) {this.name = name;this.age = age;}
}class Student extends Person {protected int score;public Student(String name, int age, int score) {this.score = score;}
}

Error:
Main.java:21: error: constructor Person in class Person cannot be applied to given types;
public Student(String name, int age, int score) {
^
required: String,int
found: no arguments
reason: actual and formal argument lists differ in length
1 error
error: compilation failed

运行上面的代码,会得到一个编译错误,大意是在Student的构造方法中,无法调用Person的构造方法。

这是因为在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();,所以,Student类的构造方法实际上是这样:

class Student extends Person {protected int score;public Student(String name, int age, int score) {super(); // 自动调用父类的构造方法this.score = score;}
}

但是,Person类并没有无参数的构造方法,因此,编译失败。

解决方法是调用Person类存在的某个构造方法。例如:

class Student extends Person {protected int score;public Student(String name, int age, int score) {super(name, age); // 调用父类的构造方法Person(String, int)this.score = score;}
}

这样就可以正常编译了!

因此我们得出结论:如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

这里还顺带引出了另一个问题:即子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net微服务实战之DevOps篇

技术只是基础该系列的两篇文章《.Net微服务实战之技术选型篇》和《.Net微服务实战之技术架构分层篇》都是以技术角度出发描述微服务架构的实施。如果技术选型篇叙述的是工具,那么架构分层篇讲的就是技巧,而本篇要讨论的就是原则。一直以来我会给身边向我…

阿里云挑战赛

文章目录第一题题目:题解:第二题题目题解第三题题目题解第四题题目:题解第五题题目题解第六题题目题解第七题题目:题解第八题题目:题解;题解赛后出第一题 题目: 【单选】filter 方法意图过滤传入的订单列…

使用C#编写STM32对接物联网平台IoTSharp发送遥测数据

在之前的文章中, 我们阐述了如何用C#在STM32上写第一个Hello world , 有朋友抱怨国内介绍文章, 都是一个 Hello world , 然后再也没有音讯, 写到这里我想提一下我的初心, 那就是告诉所有人C#无所不能&…

JavaMVC之JSON

JSON 8.1、什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写…

Java源文件声明规则

源文件声明规则: 当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。 一个源文件中只能有一个 public 类 一个源文件可以有多个非 public 类 源文件的名称应该和 public 类的类名保持一致。例如:源文件中…

Java内置数据类型

内置数据类型 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 byte: byte 数据类型是8位、有符号的,以二进制补码表示的整数; …

龙芯团队完成CoreCLR MIPS64移植,在github开源

国产龙芯的软件生态之中.NET不会缺席,毕竟 C# 与 .NetCore/Mono 也是全球几大主流的编程语言和运行平台之一,最近一段时间听到太多的鼓吹政务领域不支持.NET, 大家都明白这是某些人为了自己的利益打压使用.NET技术的公司,我今天写…

alibaba实习生代码大赛

文章目录题目Explanation代码(此代码排名13,前十名有奖233333)结果题目 在一个风雨交加的周末下午,大部分人都很不开心,因为出行不变,计划的娱乐活动都取消了,但菜鸟快递员小王却异常高兴&…

Java自动类型转换和强制类型转换(隐含)

自动类型转换 整型、实型(常量)、字符型数据可以混合运算。 运算中,不同类型的数据先转化为同一类型,然后进行运算。 转换从低级到高级。 低 ------------------------------------> 高 byte,short,char—> int —> …

来谈一谈专注力的真相

这是头哥侃码的第205篇原创在日常生活(或工作)中,你有没有遇上过这样的情况?比如你正在跟小伙伴讨论一个技术方案,聊着聊着,突然小A脑袋一抽筋,问你:“老大,咱们这周五晚…

成功陷阱有感

分享一下看到的关于成功陷阱的段落,关于成功陷阱,主要是最近面试字节跳动时,面试官向我推荐的,虽然也没有找到名叫《成功陷阱》的书(后来发现书名应该是叫《能力陷阱》),但看了一些文章 最近听了…

Java访问控制修饰符

访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。 Java 支持 4 种不同的访问权限。 default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。 使用对象:类、接口、变量…

数据结构与算法专题——第三题 最长公共子序列

一:作用最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。二:概念举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个&#x…

Java实现两个递增有序链表合并成一个递增有序链表和两个非递减有序链表合成一个非递增有序链表

代码如下: package sjjgniub;import java.util.LinkedList; import java.util.Scanner;SuppressWarnings("all") public class LinkList {private class Node{int data;Node next;public Node(){}public Node(int data){this.data data;next null;}}Node head nu…

职场PUA到底有多可怕?

阅读本文大概需要 5.2分钟。“小张,好好干啊,明年一定给你加薪!” 。从小张入职这家公司起,这是老板对小张第三次这么说了。小张每天干到晚上12点,任劳任怨,虽然一直没涨过工资,但是老板的不断认…

SQL5 将查询后的列重新命名(数据库的几种去重方法)

牛客网题目 描述 题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 示例:user_profile 根据示例,你的查询应返回以下结果: 示例1 输入: drop table if exists user_profile; CREA…

数据结构与算法专题——第二题 优先队列

前段时间玩小爬虫的时候,我把url都是放在内存队列里面,有时我们在抓取url的时候,通过LCS之类的相似度比较,发现某些url是很重要的,需要后端解析服务器优先处理,针对这种优先级比较大的url,普通的…

SQL9 查找除复旦大学的用户信息(数据库否定语句写法)

描述 题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据 示例:user_profile 根据输入,你的查询应返回以下结果: 示例1 输入: drop table if exists user_profile; CREATE TABLE use…

SQL10 用where过滤空值练习

描述 题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户明细数据。 示例:user_profile 根据输入,你的 查询应返回以下结果: 示例1 输入…