【JAVA】向上转型与构造方法之感悟

文章详细解释了Java中的构造函数调用顺序、子类与父类成员变量和方法的关系,以及向上转型的概念。通过实例展示了如何在子类中重写基类方法和访问不同作用域的成员变量。同时提到了Java虚拟机的相关知识,强调了全面学习文档的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子类有参A

我是经管学院的

子类有参B

姓名:null,年龄:0

分析:

  1. 首先第一句话:“基类无参”,说明当子类创建对象时,在调用子类的构造函数之前一定会先调用父类的构造函数,这里是默认使用父类无参的构造函数。

  2. 第二句输出“子类有参A”,是因为 this(name, age);因此在子类的构造函数内部调用了自己的其他构造函数。

  3. 第三句话“我是经管学院的”,是因为在创建stud对象的时候使用了有参的构造函数Student(String name, int age, String sch),并且赋值了。

  4. 最重要的是最后一句:姓名:null,年龄:0,为什么这里不是姓名:Li,年龄:18,因为这里的name, age都是父类私有的成员变量,只能通过调用父类的有参构造方法来赋值,因此这里为null和0

习题二

=================================================================

class Parent{

int x = 100;

void m() {

System.out.println(x);

}

}

class Child extends Parent{

int x = 200; //与基类x同名

void m() { //重写基类的m()

System.out.println(“x=”+x);

System.out.println(“super.x=”+super.x);

super.m(); //调用基类的m()

}

}

public class Zy4_2 {

public static void main(String[ ] args) {

Parent a = new Child(); //转型

a.m(); //转型对象调用的是子类重写基类的m()

System.out.println(a.x);

}

}

结果:

x=200

super.x=100

100

100

分析:这里使用了向上转型,即父类的引用变量指向了一个子类的对象。

  1. 首先,由于子类与父类有相同名字的成员变量,但此处两者是不同的,分别占用了不同的内存空间。

2.由于子类与父类有同名,同参数的方法,因此子类对父类的m方法进行了重写,因此 a.m(); 调用的是子类的构造方法。

  1. 接着通过 super.m();调用父类的m方法

在这里插入图片描述

习题三

=================================================================

class Aw {

int m;

int getM() { return m;}

int seeM() { return m;}

}

class Bw extends Aw {

int m;

int getM() { return m+10; } //重写

int f() { return m; } //子类新增

}

public class Zy4_3 {

public static void main(String[ ] args) {

Bw b = new Bw ();

b.m = 20;

System.out.println(b.getM());

Aw a = b; //转型

a.m = -10; //基类引用变量访问的是基类的m

System.out.println(a.getM()); //调用的是子类重写基类的方法

System.out.println(b.seeM()); //基类方法访问的是基类m

System.out.println(b.f()); //子类新增的方法访问的是子类的m

System.out.println(a.equals(b));

}

}

结果:

30

30

-10

20

true

分析:

  1. 首先第一个b.getM()输出的就是30,由于发生了Aw a = b;的向上转型,因此a指向了b的对象,a.getM(),调用的是子类重写父类的方法。

2.关于 b.f(),由于父类没有此方法,因此不能写成a.f()

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

…(img-B9ZZyGpw-1714498304749)]
[外链图片转存中…(img-74gIdOnQ-1714498304750)]
[外链图片转存中…(img-lgtfLsqs-1714498304750)]
[外链图片转存中…(img-bpuUywXL-1714498304750)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值