首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java子类和父类构造函数

参考链接: Java继承和构造函数 这篇文章总结了关于Java构造常见​​问题。  1)为什么创建一个子类对象要也需要调用父类构造函数? ...让父类中构造器被调用原因是,如果父类有私有的属性需要在它构造函数中初始化。 ...)一个常见​​错误消息: Implicit super constructor is undefined for default constructor 这是很多Java开发人员常见编译错误消息:...Must define an explicit constructor"    出现这种编译错误,因为默认父类构造函数未定义。...由于编译器试图插入super()这条语句到子类两个构造函数中,但Super默认构造函数没有被定义,所以编译器会报该错误消息。

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JAVA private私有 默认构造函数 生成过程

    如果一个类没有定义任何构造函数,则编译器将生成一个缺省构造函数,该构造函数访问修改符和类访问修改符相同,例如: class test将生成test()构造函数 public class test将生成...如果读者仔细思考一下创建一个新类实例过程,大概已经明白了产生上述现象原因: 当程序试图创建一个Wrapper$InnerClass类实例时,却不能使用其缺省构造函数,因为Wrapper$InnerClass...因此编译器不得不再生成一个可访问构造函数,由于这里只有Wrapper类private void testInnerClass()方法使用了new InnerClass(),所以编译器只(需)为这个新构造函数生成了...同时,为了和已有的缺省构造函数有所区别,就加入了一个Wrapper$1类型参数,为此,编译器还要生成一个Wrapper$1类。...,而任何一个可以有实际值参数都会要求开辟一些内存来存放它。那么java编译器不会做优化吗?问题是java编译器最终产生只是class代码,在class代码层次,无法向虚拟机表达这样优化。

    1.9K30

    关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认会调用父类构造方法2 常见错误:Implicit super constructor is und

    这篇文章总结了Java使用构造函数中最常遇到五个问题!...** 之所以要调用父类构造方法,是因为super类可能需要构造函数来初始化一些私有的成员变量。...编译器自动插入super构造方法后,子类构造函数就会像下面这样: public Sub(){ super(); System.out.println("Sub"); } 2 常见错误:...编译错误是因为默认super()无参构造函数是没有定义。在Java中,如果一个类没有定义构造函数编译器会自动插入一个默认无参构造函数。...上一小节,我们知道,如果子类构造函数中,没有显示调用父类构造函数,那么,编译器就会插入super(),也就是自动调用无参构造函数。但是此时,父类没有无参构造函数,所以就会报错了。

    2.8K41

    HeadFirstJava

    java执行过程来龙去脉 源代码——编译器——输出——java虚拟机 扩展名为.java ——扩展名为.class 不要直接用类名点变量来改变属性值,一般都用get、set方法。...integer 0 float 0.0 boolean false reference null 局部变量没有默认值,如果在变量被初始化前就要使用的话,编译器会显示错误。...)如果类带有抽象方法,则此类必定标识为抽象; 4)抽象方法没有内容,它声明是以分号结束; 5)抽象方法必须在具体类中运行; 6)Java所有的类都是Object直接或间接子类; 7)方法可以声明...,则此转换会在执行期产生异常; 10)java不允许多继承; 11)实现某个接口类必须实现它所有的方法,因为这些方法都是public与abstract; 12)要从子类调用父类方法可以用super...; 4)构造函数是个会在新建对象时候执行程序代码; 5)构造函数必须与类同名且没有返回对象; 6)可以用构造函数来初始化创建对象状态; 7)最好能有无参构造函数让人可以选择使用默认值; 8)构造函数可以是公有

    19820

    TypeScript 官方手册翻译计划【十二】:类

    ,JavaScript 用 # 声明私有字段在编译之后也仍然是私有的,并且没有提供像上面那样方括号语法用于访问私有成员,所以 JavaScript 私有成员是“强私有的”。...TypeScript(和 JavaScript)并没有像 C# 和 Java 那样提供静态类这种结构。 C# 和 Java 之所以需要静态类,是因为这些语言要求所有的数据和函数必须放在一个类中。...这种方法利弊权衡和上面使用箭头函数方法相反: JavaScript 调用方可能仍然会在没有意识情况下错误地调用类方法 只会给每个类定义分配一个函数,而不是给每个类实例分配一个函数 仍然可以通过...abstract member 'getName' from class 'Base'. // 忘记实现抽象成员 } 抽象构造签名 有时候你想要接受一个类构造函数作为参数,让它产生某个类实例...所以,你编写函数所接受参数应该带有一个构造签名: function greet(ctor: new () => Base) { const instance = new ctor(); instance.printName

    2.6K10

    Java不看后悔系列】|面向对象编程|

    父类构造方法私有属性: 如果父类构造方法是私有的,子类不能直接调用父类构造方法。这通常会限制子类对父类构造方法继承。 在Java中,子类会继承其父类一些特性,但并非所有内容都会被继承。...在Java中,当你在子类中创建构造函数时,通常需要显式调用超类构造函数,使用super关键字来实现。...如果在子类构造函数中没有显式调用超类构造函数Java将隐式插入对超类默认(无参)构造函数调用。...值得注意是,如果超类没有默认构造函数,并且在子类构造函数中没有显式调用超类构造函数,那么将会引发编译错误。...因为Java子类构造函数第一条语句 要么是使用super显式调用超类构造函数, 要么是隐式调用超类默认构造函数

    13810

    【选择题】Java基础测试七

    【选择题】Java基础测试七 86.欲构造ArrayList类一个实例,此类继承了List接口,下列哪个方法是正确?...B、 第六行会产生编译错误 C、 第六行会产生运行错误 D、 程序会运行和启动 90.要从文件"file.dat"中读出第10个字节到变量c中,下列哪个方法适合?...编程所必须默认引用包为( B ) A. java.sys包 B. java.lang包 C. java.util包 (工具包) D.以上都不是 92.下面语句在编译时不会出现警告或错误是...父类比它子类方法更多; (子类继承父类私有属性和方法,并且可以重写方法) D....子类构造函数中可以使用super( )来调用父类构造函数; 96.给出下面代码段, 哪行将引起一个编译错误

    2.6K30

    C++终结类

    所以,只要类构造函数子类中无法被访问,那么就阻止了该类被继承,实现终结类。 如果将一个类构造函数声明为私有(private),可以阻止该类进一步派生,但是该类也无法直接实例化了,此方法行不通。...一个基类如果被虚拟继承,那么在创建它子类对象时,该基类构造函数需要单独被调用。此时,如果该基类构造函数在孙子类构造函数中无法访问,那么就实现了基类子类不能被继承。...将它默认构造函数访问权限设定为protected,这样它自身不能产生任何实例,只能用作基类。...,FinalClassChild构造函数中需要调用FinalParent构造函数,而FinalParent构造函数在FinalClass中已经变成了私有private,不能被FinalClassChild...任何成员函数所访问,导致编译错误

    51520

    C++实现不能被继承类——终结类

    解决方法 基本思路:由于任何派生类对象在创建时候,都必需在派生类构造函数中调用父类构造函数。所以,只要类构造函数子类中无法被访问,那么就阻止了该类被继承,实现终结类。...一个基类如果被虚拟继承,那么在创建它子类对象时,该基类构造函数需要单独被调用。此时,如果该基类构造函数在孙子类构造函数中无法访问,那么就实现了基类子类不能被继承。...将它默认构造函数访问权限设定为protected,这样它自身不能产生任何实例,只能用作基类。...,FinalClassChild构造函数中需要调用FinalParent构造函数,而FinalParent构造函数在FinalClass中已经变成了私有private,不能被FinalClassChild...任何成员函数所访问,导致编译错误

    1.8K30

    【选择题】Java基础测试四(15道)

    (重载:定义同名方法,方法形式参数个数、类型或顺序各不相同,传回值也可以不相同) 43.A派生出子类B,B派生出子类C,并且在Java源代码中有如下声明: 1....arr[] = new int[5]; public static void main(String a[]) { System.out.println(arr[0]);} } } A、编译时将产生错误...B、编译时正确,运行时将产生错误 C、输出零 D、输出空 (输出数组首地址arr[0],int类型初始值为0) 49.在使用interface声明一个接口时...B.树形、网形、环形 C.顺序、选择、循环 D.主程序、子程序、函数 55.下列关于构造方法叙述中,错误是( C...) A.Java语言规定构造方法名与类名必须相同 B.Java语言规定构造方法没有返回值,但不用void声明 C.Java语言规定构造方法不可以重载 D.Java语言规定构造方法只能通过new自动调用

    1.7K90

    JavaSE基础 —— 继承 && 修饰符

    ,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员 示例代码 class Father { public void show() { System.out.println...弊端 继承让类与类之间产生了关系,类耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类独立性。 3....方法重写注意事项 私有方法不能被重写(父类私有成员子类是不能继承) 子类方法访问权限不能更低(public >默认 > 私有) 示例代码 public class Father { private...Java中继承注意事项 Java中类只支持单继承,不支持多继承 错误范例:class A extends B,C { } Java中类支持多层继承 多层继承示例代码: class Grandpa {...带包编译,带包运行 带包编译:javac -d .类名.java 例如: javac -d . com.fanyi.demo.HelloWorld.java 带包运行:java包名+类名 例如:java

    20010

    java学习笔记 head first java

    RuntimeException被称为不检查异常,可以抛出和catch但是没有这个必要,编译器也不管。 任何继承过它都会被编译器忽略。 try catch是处理真正异常,而不是程序逻辑错误。...如果对象在继承树上有个不可序列化祖先类,则该不可序列化类以及之上构造函数就会执行,一旦构造函数连锁启动后将无法停止。也就是说从第一个不可序列化父类开始,全部都会重新初始状态。...参数构造函数来创建TreeSet HashMap 用put和get。...泛型万用字符。使用带有声明时,编译器不会让你加入任何东西到集合中! // ? 继承或实现AnimalT public void takeAnimals(ArrayList<?...可以在enum中加入构造函数、方法、变量和特定常量内容(class body),不常见,但是可行。因为 Enum实际上是继承java.lang.Enum类,是个final类。

    57920

    Java50个关键字总结

    assert 表达式:错误信息; 与第一种方法相同,只是异常中带有错误信息。 使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。...例如:  class 子类 extends父类{} Java继承是单继承,即子类只能有一个直接父类。 除了private,子类可以访问父类方法和成员变量。 ...例如c语言,要编译后用javah产生一个.h文件。导入该.h文件并且实现native方法,编译成动态链接库文件。在Java加载动态链接库文件,这个native方法就可以在Java中使用了。 ...、公有(Public) & 不包括有(Private)构造函数带 "Declared"方法是支持取出包括公共(Public)、保护(Protected)、默认(包)访问和私有(Private)构造方法...,但不包括继承构造函数   Constructor  //a.获取指定构造函数(公共/继承) Constructor getConstructor(Class<?

    62400

    Java50个关键字总结

    assert 表达式:错误信息; 与第一种方法相同,只是异常中带有错误信息。 使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。...例如:  class 子类 extends父类{} Java继承是单继承,即子类只能有一个直接父类。 除了private,子类可以访问父类方法和成员变量。 ...例如c语言,要编译后用javah产生一个.h文件。导入该.h文件并且实现native方法,编译成动态链接库文件。在Java加载动态链接库文件,这个native方法就可以在Java中使用了。 ...、公有(Public) & 不包括有(Private)构造函数带 "Declared"方法是支持取出包括公共(Public)、保护(Protected)、默认(包)访问和私有(Private)构造方法...,但不包括继承构造函数   Constructor  //a.获取指定构造函数(公共/继承) Constructor getConstructor(Class<?

    58500

    Java面试-面向对象

    Java接口是类蓝图,或者可以说它是抽象方法和静态常量集合。在接口中,每个方法都是公共和抽象,但不包含任何构造函数。因此,接口基本上是一组带有空主体相关方法。...您可以覆盖Java私有或静态方法吗? 您不能在Java中覆盖私有或静态方法。如果您在子类中创建具有相同返回类型和相同方法参数类似方法,则它将隐藏超类方法;否则,它将隐藏超类方法。这称为方法隐藏。...您必须注意一件事是Object clone()是一种受保护方法,因此您需要重写它。 Q17。Java构造函数是什么? 复制构造函数是一个成员函数,用于使用同一类另一个对象初始化一个对象。...尽管在Java中不需要复制构造函数,因为所有对象都是通过引用传递。而且,Java甚至不支持自动按值传递。 Q18。什么是Java构造函数重载?...在Java中,构造函数重载是一种将任意数量构造函数添加到每个具有不同参数列表技术。编译器使用列表中参数数量及其类型来区分重载构造函数

    70920

    Java50个关键字总结

    assert 表达式:错误信息; 与第一种方法相同,只是异常中带有错误信息。 使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。...例如:  class 子类 extends父类{} Java继承是单继承,即子类只能有一个直接父类。 除了private,子类可以访问父类方法和成员变量。 ...例如c语言,要编译后用javah产生一个.h文件。导入该.h文件并且实现native方法,编译成动态链接库文件。在Java加载动态链接库文件,这个native方法就可以在Java中使用了。 ...、公有(Public) & 不包括有(Private)构造函数带 "Declared"方法是支持取出包括公共(Public)、保护(Protected)、默认(包)访问和私有(Private)构造方法...,但不包括继承构造函数   Constructor  //a.获取指定构造函数(公共/继承) Constructor getConstructor(Class<?

    58400

    Java50个关键字总结「建议收藏」

    assert 表达式:错误信息; 与第一种方法相同,只是异常中带有错误信息。 使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。...例如: class 子类 extends父类{ } Java继承是单继承,即子类只能有一个直接父类。 除了private,子类可以访问父类方法和成员变量。...范围:[-263,263) long a = 3216846849646L; 30.native native可以让Java运行非Java实现方法。例如c语言,要编译后用javah产生一个.h文件。...、公有(Public) & 不包括有(Private)构造函数 带 “Declared”方法是支持取出包括公共(Public)、保护(Protected)、默认(包)访问和私有(Private)构造方法...,但不包括继承构造函数 Constructor //a.获取指定构造函数(公共/继承) Constructor getConstructor(Class<?

    1K30

    Effective Java 2.0_中文版_Item 4

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 Item 4: 用私有构造函数强制不能实例化 有时你会想写一个只包含一组静态方法和静态变量类。...这种类名声很不好,因为有些人滥用它们来避免思考如何面向对象,但它们确实是有用。它们可以用来以java.lang.Math或java.util.Arrays方式来组织与基本类型或数组相关方法。...这种工具类被设计成不能实例化:它实例是没有意义。然而,在缺少显式构造函数情况下,编译器会提供一个公有的无参构造默认函数。对用户而言,这个构造函数与其它构造函数没有任何差别。...如果一个类没有显式构造函数,会产生默认构造函数,因此,一个含有私有构造函数类不能被实例化: // Noninstantiable utility class public class UtilityClass...这种习惯用法一个副作用就是阻止了类子类化。子类所有的构造函数必须调用父类构造函数,无论是显式或隐式,但这种情况下子类不能调用父类构造函数

    26850
    领券