JavaSE--面向对象编程--笔试题

JavaSE-面向对象编程-笔试题

请问构造器能否被重写?为什么?

不能;因为构造方法名需要与类名相同,重写是指子类对从父类继承而来的方法的扩展重写,而继承关系中父类和子类类名是不同的,因此构造器没法被子类重写

Overload和Override的区别是什么?参数列表相同但返回值类型不同能重载吗?

Overload:重载;参数列表不同,方法名相同,与返回值类型无关(不一定同一个类,父子类之间也能形成重载

Override:重写;子类出于需要对从父类继承来的父类的方法进行扩展重写

使用final关键字修饰一个引用变量时,请问是引用不能变还是引用的对象不能变?

引用不能变。引用指向引用对象的过程是在栈区中声明一个引用(变量),创建对象时是在堆区中存放创建出来的对象,引用指向对象便是将对象在堆区中的地址放在该引用中。因此我们用final修饰引用就是限定该引用内存放的地址不能发生改变,而堆区中的对象值是能改变的(比如值从30变为80)

简述复制引用和复制对象的区别

复制引用是在栈区中再复制一个新引用,这个引用内放和原引用一样的地址(和原引用指向一样的堆区对象),一旦原对象中值发生改变,两个引用对应的对象值也就发生了改变。

复制对象是在堆区中新创一个空间,该空间放与原来的对象一样的对象,用一个引用指向该对象,创建后该对象和原对象就不再有任何关系了。

阅读程序并分析执行结果是什么?

程序阅读题
1、main()方法中使用多态——父类引用指向子类对象。该过程会在栈区中创建一个父类引用,而在堆区中创建一个父类对象和子类对象(先创建父类对象再创建子类对象,可理解为父类对象包含在子类对象中
2、先创建父类对象,因此要先调用父类构造方法,父类构造方法中调用callName()方法,由于是先创建父类对象,此时父类构造方法中原本是应该调用父类的callName()方法,但是由于父类的callName()方法被子类重写了,所以此时调用的应该是子类重写后的callName()方法,而子类的callName()方法中输出的baseName成员变量根据就近原则应该输出的是子类的成员变量,此时子类对象还没创建,因此此时输出的baseName值为null
3、若在多态后使用引用调用callName()方法,即b.callName(),此时子类对象已经创建,因此此时输出的是子类成员变量callName()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值