子类对象实例化过程的理解

提到子类对象的实例化,就得先对this 与super做一个回顾
1.this关键字
1.可以调用的结构:属性、方法;构造器

2.this调用属性、方法:
	this理解为:当前对象  或 当前正在创建的对象
	
	1> 在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用
		当前对象属性或方法。但是,通常情况下,我们都择省略"this."。
		特殊情况下,如果方法的形参和类的属性同名时,我们必须显式
		 的使用"this.变量"的方式,表明此变量是属性,而非形参。

	2> 在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调
	用当前正在创建的对象属性或方法。但是,通常情况下,我们都择省略
	"this."。特殊情况下,如果构造器的形参和类的属性同名时,我们必须
	显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
	
3.this调用构造器:
	① 我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类
	中指定的其他构造器
	② 构造器中不能通过"this(形参列表)"方式调用自己
	③ 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了"this(形参
	列表)"
	④ 规定:"this(形参列表)"必须声明在当前构造器的首行
	⑤ 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构
	造器
2.super关键字
1.super 关键字可以理解为:父类的

2.可以用来调用的结构:属性、方法、构造器

3.super调用属性、方法: 

	1> 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.
	方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我
	们习惯省略"super."
	
	2> 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用
	父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是
	父类中声明的属性。
	
	3> 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用
	父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用
	的是父类中被重写的方法。


4.super调用构造器:
	1>  我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调
	用父类中声明的指定的构造器
	
	2> "super(形参列表)"的使用,必须声明在子类构造器的首行!
	
	3> 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"
	只能二选一,不能同时出现
	
	4> 在构造器的首行,没显式的声明"this(形参列表)"或"super(形参列表)"
	,则默认调用的是父类中空参的构造器:super()
	
	5> 在类的多个构造器中,至少一个类的构造器中使用了"super(形参列表)",
	调用父类中的构造器

子类对象实例化过程

  • 子类继承父类以后,就获取了父类中声明的属性或方法。
  • 当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用。
  • 创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。
public Man(String name, int age) {
       this(age);
       super(); //调用错误,具体流程见下图
       this.age = age;
       this.name = name;
}
public Man(int age) {
       this.age = age;
}

在这里插入图片描述

注意:
  • 虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象是一种编程范式,它将程序设计的重点放在了对象的概念上。在面向对象编程中,程序被组织成一个个相互独立的对象,这些对象通过消息传递的方式进行交互。每个对象都有自己的状态(属性)和行为(方法),并且能够对外部提供接口以访问和修改其内部状态。 面向对象编程有以下几个核心概念: 1. 类(Class):类是对象的抽象,它定义了对象的共同特征和行为。类可以看作是一种自定义数据类型,可以创建多个具有相同属性和方法的对象。 2. 对象(Object):对象是类的实例化,它是具体存在的个体,具有类定义的属性和方法。 3. 封装(Encapsulation):封装是将数据和操作封装在一个单元中,通过对外提供有限的接口来隐藏内部实现细节。这样可以提高代码的安全性和可维护性。 4. 继承(Inheritance):继承是指一个类可以派生出子类,并且子类可以继承父类的属性和方法。通过继承,可以实现代码的复用和扩展。 5. 多态(Polymorphism):多态是指同一种操作可以作用于不同的对象上,产生不同的结果。多态通过方法的重写和方法的重载来实现。 面向对象编程可以提高代码的模块化和可维护性,使得程序更容易理解和扩展。Python是一种支持面向对象编程的语言,通过定义类和创建对象,可以充分利用面向对象编程的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值