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

Java中子类和构造函数

如果没有,编译器会插入调用构造语句。这就是为什么创建子类对象时类中构造函数会被调用。  这里没有创建两个对象,只有一个子对象。...让类中构造器被调用原因是,如果类有私有的属性需要在它构造函数中初始化。 ...Java中,如果一个类没有定义构造函数,编译器会为类默认创建一个无参构造函数。如果在类中定义了构造函数super(String s),在这种情况下,编译器将不会为类创建一个无参构造函数。...这是上边Super类发生情况。  子类构造函数,无论有参构造还是无参构造,将会调用类中默认无参构造函数。...3)子类中显式调用构造函数  下面的代码是正常:    子类(Sub)构造函数显式地调用类(Super)中带参构造参数。如果类中定义了相对应构造函数,那将会被正常良好调用。

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

Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- Kotlin 类中 , 可以 类声明 时 类名后...定义 " 主构造函数 " ; 构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称...---- Kotlin 类只允许 定义类时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ; 次构造函数 定义 Kotlin 内部 , 可以定义 多个 次构造函数..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数中可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值

4.8K20

KotlinKotlin继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

类继承格式 : 使用 " : " 继承类 ; 如果该类有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类构造函数下面会根据不同情况详细解析 ; //注意这里构造函数需要实际调用...类没有主构造函数 ---- 1 . 类没有主构造函数 : 准确说是 , 构造函数没有参数 , 省略了 constructor 关键字和空括号 () ; 2 ....子类有主构造函数 : 类必须在主构造函数中初始化 , 子类 constructor() 可以省略 ; " : " 后 Father() 相当于调用了构造函数 , 将子类构造函数委托给构造函数执行...构造函数与子类构造函数总结 ---- 子类构造函数最终委托 : 子类构造函数归根到底都要委托给构造函数 ; ① 子类主构造函数 : 假如子类有主构造函数 , 该主构造函数肯定要委托构造函数执行...; ② 子类次构造函数 : 此时子类构造函数都要委托子类构造函数执行 , 相当于间接委托类主构造函数执行 ;

1.2K10

子类A继承类B, A a = new A(); 则类B构造函数类B静态代码块、类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行先后顺序是?

(1)子类A继承类B, A a = new A(); 则: 类B静态代码块->子类A静态代码块->类B非静态代码块->类B构造函数->子类A非静态代码块->子类A构造函数 (2)若子类构造函数中显式调用了构造函数...,但是该类继承自A,所以要先调用构造方法,这里通过super(“B”)显示调用了带参构造。...执行带参构造前要先对类中对象进行初始化,对类中c成员进行初始化,调用了C类无参构造,所以调用顺序为: 先调用C类无参构造 再调用A类带参构造 最后调用调用子类构造 (3...)JVM调用mian方法之前先用进行静态内容初始化。...顺序为:静态变量, 静态代码块 ,子类静态变量,子类静态代码块。

2.1K30

构造函数以及析构函数PHP中需要注意地方

构造函数以及析构函数PHP中需要注意地方 基本上所有的编程语言类中都会有构造函数和析构函数概念。...构造函数函数实例创建时可以用来做一些初始化工作,而析构函数则可以实例销毁前做一些清理工作。...没事,我们一个一个来看: 子类如果重写了构造或析构函数,如果不显式地使用parent::__constuct()调用构造函数,那么构造函数不会执行,如C类 子类如果没有重写构造或析构函数...可以看出,必须要让php使用gc回收一次,确定对象引用都被释放了之后,类析构函数才会被执行。...构造函数重载 PHP是不运行方法重载,只支持重写,就是子类重写类方法,但不能定义多个同名方法而参数不同。Java等语言中,重载方法非常方便,特别是类实例化时,可以方便地实现多态能力。

1.6K20

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

编译器错误是因为默认super()无参构造函数是没有定义Java中,如果一个类没有定义构造函数,编译器会自动插入一个默认无参构造函数。...上一小节,我们知道,如果子类构造函数中,没有显示调用构造函数,那么,编译器就会插入super(),也就是自动调用无参构造函数。但是此时,类没有无参构造函数,所以就会报错了。...解决这个问题很简单,我们可以给类插入一个无参构造函数,或者子类构造函数中显示调用类有参构造函数子类构造函数中显示调用构造函数 下面的代码是正确。 ?...Paste_Image.png 构造函数使用规则 简单说,使用时候,子类构造函数必须调用构造函数,不管有没有显示声明。所以,被调用构造函数,一定在定义好!...为什么Java一个类已经实现了一个带参构造函数时候,不实现默认无参构造函数? 这是个很有趣问题。

2.7K30

创建子类对象时,构造函数中调用被子类重写方法为什么调用是子类方法?

static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象时候类会调用子类方法...但是:创建B对象类会调用方法? 答案: 当子类被加载到内存方法区后,会继续加载类到内存中。...如果,子类重写了方法,子类方法引用会指向子类方法,否则子类方法引用会指向方法引用。 如果子类重载了类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载类方法,则方法引用会指向类方法。 当子类对象创建时,会先行调用构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译时候,构造方法调用方法参数已经强制转换为符合类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

Kotlin安卓开发学习(2)

之后,我们需要让子类去继承类。...当然,主构造函数没有函数体,如果我们需要在主构造函数里编写一些逻辑,可以使用init结构体,所有主构造函数逻辑都可以写在里面: class Student(val sno: String, val...这就涉及了Java继承特性中一个规定,子类中构造函数必须调用类中构造函数,这个规定在Kotlin中也要遵守。...根据继承特性规定,子类构造函数必须调用构造函数,可是主构造函数并没有函数体。Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解设计方式:括号。...子类构造函数调用类中哪个构造函数继承时候通过括号来指定。 因此,如果我们类主构造函数上定义参数,继承时也要在括号里定义。

36720

Kotlin面向对象编程,深入讨论继承写法问题

open关键字之后,我们就是主动告诉Kotlin编译器,Person这个类是专门为继承而设计,这样Person类就允许被继承了。...那或许有的朋友可能会问了,主构造函数没有函数体,如果我想在主构造函数中编写一些逻辑该怎么办呢?...那么再来回头看一下Student类,现在我们声明了一个主构造函数,根据继承特性规定,子类构造函数必须得调用构造函数,可是主构造函数并没有函数体,我们怎样去调用构造函数呢?...Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解设计方式:括号。子类构造函数调用类中哪个构造函数,通过后面加上括号来指定。...val,因为构造函数中声明成val或者var参数将成为全局变量,这就会导致和类中同名name和age字段造成冲突。

82830

基于 Alpine Docker 镜像编译程序无法函数环境运行

最近有一个用户反馈, 他使用 golang:1.13.1-alpine3.10 这个镜像来编译可执行程序无法函数环境运行, 报错信息如下: fork/exec /var/user/main: no...such file or directory macOS 下编译则没有这个问题 问题定位 还未来得及定位问题, 用户便反馈说换了一个镜像就没问题了, 于是没能获得更多信息 过了几天, 有一个同事群里贴出了...Go 程序链接出错信息, 看起来也是 Alpine Linux 下编译, 有人回复道 Alpine Linux 使用不是 glibc 啊哈, 终于有线索了, 写代码验证一下 package main...ld-musl-x86_64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007f2512958000) 可以看到, 缺失了 libc.musl-x86_64.so.1, 运行一下程序...(完整出错信息可通过使用 Go os/exec 包启动 main-alpine 获得) 解决方案 问题原因在于云函数运行环境(CentOS)提供是 glibc, 而 Alpine Linux

5.6K00

【C++】继承 ⑥ ( 继承中构造函数和析构函数 | 类型兼容性原则 | 类指针 指向 子类对象 | 使用 子类对象 为 类对象 进行初始化 )

地方 , 都可以使用 " 公有继承 " 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外 所有 成员变量 和 成员方法 ; 功能完整性 :..." 私有继承 " 派生类 , 是 不具有 基类 完整功能 , 因为 最终继承 后派生类 , 无法 类外部调用 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...子类对象 , 类指针 值为 子类对象 堆内存 地址 , 也就是 将 子类对象 地址 赋值给 类类型指针 ; 引用 : 类引用 引用 子类对象 , 将 子类对象 赋值给 类类型引用 ; 二...// 子类对象 可以调用 类公有函数 child.funParent(); // 将指向子类对象指针传给接收类指针函数 // 也是可以 fun_pointer...// 通过类指针调用函数 p_parent->funParent(); // 将指向子类对象指针传给接收类指针函数 // 也是可以 fun_pointer

23320

第12章 元编程与注解、反射第12章 元编程与注解、反射

第12章 元编程与注解、反射 反射(Reflection)是在运行时获取类函数(方法)、属性、类、接口、注解元数据、泛型信息等类内部信息机制。...注解是把编程中元数据信息直接写在源代码中,而不是保存在外部文件中。 使用注解之前(甚至使用之后),XML配置文件被广泛应用于编程过程中元数据描述。...其中 @TestCase(id = "1") 是注解构造函数使用。注解可以有带参数构造器。...Kotlin函数和属性也是头等公民,我们可以通过反射来内省属性和函数:如运行时属性名或类型,函数名或类型等。 Kotlin中我们有两种方式来实现反射功能。...] println(kTypeParameter.variance) // INVARIANT KClass constructors 属性中存有构造函数信息,我们可以从中获取构造函数入参等信息

98220

23.C++- 继承多种方式、显示调用构造函数、父子之间同名函数、virtual虚函数  上章链接: 22.C++- 继承与组合,protected访问级别

C++中,继承方式共有3种: public继承 -指成员(变量和函数)访问级别,子类中保持不变 private继承 -指成员,子类中变为private私有成员....,编译器会默认调用类无参构造函数 若有子类对象,也会默认调用子类对象无参构造函数。...: StrA() //类无参构造函数 StrB(int i):123 也可以通过子类构造函数初始化列表来显示调用 接下来,修改上面子类StrB(string...s)函数,通过初始化列表调用StrA(string s)构造函数 改为: StrB(string s): StrA(s) { cout<<"StrB(int i):"<<s<<endl; } 运行打印...所以C++引入了虚函数概念,根据指针指向对象类型,来执行不同类同名覆盖成员函数,实现不同形态 定义: 类成员函数返回值前面,通过virtual关键字声明,这样便能访问子类中同名成员函数

3K90

深入理解javascript中继承机制(2)临时构造函数模式Uber – 从子对象调用对象接口将继承部分封装成函数

为了解决前文提到将共有的属性放进原型中这种模式产生子对象覆盖掉对象同名属性问题,就出现了另一种模式,我们称作为临时构造函数模式 临时构造函数模式 我们具体通过代码来分析 function Shape...F,然后将Shape构造函数原型对象赋给F原型。...Uber – 从子对象调用对象接口 传统面向对象编程语言都会有子对象访问对象方法,比如java中子对象要调用对象方法,只要直接调用就可以得到结果了。...,给每个构造函数天价了一个uber属性,同时使他指向对象原型,然后更改了ShapetoString函数,更新后函数,会先检查this.constructor是否有uber属性,当对象调用toString...时,this.constructor就是构造函数,找到了uber属性之后,就调用uber指向对象toString方法,所以,实际就是,先看对象原型对象是否有同String,有就先调用它。

1.6K20

第4章 类与面向对象编程第4章 类与面向对象编程

第4章 类与面向对象编程 在前面的章节中,我们学习了Kotlin语言基础知识、类型系统等相关知识。本章节以及下一章中,我们将一起来学习Kotlin对面向对象编程以及函数式编程支持。...(Kotlin reflection is not available) 4.2.2 声明类和构造函数 Kotlin中, 我们可以声明类时候同时声明构造函数,语法格式是后面使用括号包含构造函数参数列表...右击鼠标操作 点击之后,跳出对话框:生成次级构造函数 ? 选择Generate 选择构造函数参数 ? 生成次级构造函数 选中相应属性,点击OK,即可生成。...上面的代码运行输出 12.0 Rectangle is Clicked! 当子类继承了某个类之后,便可以使用类中成员变量,但是并不是完全继承所有成员变量。...Java 8 和Kotlin中,接口可以实现一些通用方法。 接口是抽象类延伸,Kotlin跟Java一样,不支持同时继承多个类,也就是说继承只能存在一个类(单继承)。

1.7K20

Kotlin 程序设计》第五章 Kotlin 面向对象编程(OOP)第五章 Kotlin 面向对象编程(OOP)1. 面向对象HelloWorld2. 面向对象编程思想简述3.Kotlin 面向

也就是说, Kotlin 中默认每个类都是不可被继承。这么做目的是为了程序运行性能。...3.3 构造函数 Kotlin类可以有主构造函数(Primary Constructor)和一个或多个二级构造函数(Secondary Constructor)。...("Jack",29) Kotlin中,不再使用new关键字 类成员 类可以包括 构造和初始化模块 函数 属性 匿名类 内部类 对象声明 3.5 继承 Kotlin所有的类中都有一个共同类Any(...3.8 override重写覆盖函数 Kotlin追求简洁显式风格。...Kotlin继承类并覆盖函数时,要求类必须有open标注,被覆盖函数必须有open标注,并且子类函数必须加override标注: open class Base { open fun

1.4K30

Kotlin】类初始化 ③ ( init 初始化块 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码 )

文章目录 一、init 初始化块 二、初始化顺序 一、init 初始化块 ---- Kotlin 类中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关代码 ,...时会执行一系列 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 中属性赋值 类中属性赋值 init 初始化块 中代码执行 次构造函数代码执行 代码示例 : 通过下面的代码分析 Kotlin...: 首先 , 为 name 属性赋值 , 这是构造函数 中完成操作 ; 然后 , 为 age 和 type 属性赋值 , 这是 类 中 age 属性进行赋值 , 使用是 主构造函数临时变量...; 最后 , 为 gender 赋值 , 这是 init 初始化块 中进行赋值 ; 然后分析 次构造函数 , 如下构造函数代码中 , 先执行了 主构造函数 , 然后才为 type 属性赋值...} 因此得到了上述初始化操作执行顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码

1.3K30
领券