Java构造器练习题
仔细阅读下面的程序
public class Car {
String name = "汽车";
public Car(String name) {
this.name = name;
}
// 加上main方法
public static void main(String[] args) {
Car bmw = new BMW("宝马X5");
System.out.println(bmw.name);
}
}
class BMW extends Car {
String name = "宝马";
public BMW(String name) {
this.name = name;
}
}
请问正确的选项是什么?
A.汽车 B.宝马 C.宝马x5 D.编译报错 E.输出异常
答案
答案是:D.编译报错
解析
1.相关知识
子类继承父类时,如果父类没有无参构造器,子类需要在构造函数中通过super(参数),先显示调用父类的有参构造。
2.代码流程
- 定义了Car类,包含name属性值为"汽车";
- 定义了有参构造将默认的name值"汽车"传递给参数;
- 定义了BMW类继承Car类,包含name属性值为"宝马";
- 有参构造将name属性值设为传递进来的参数值;
- Car类中的main方法中,声明了一个Car对象,new一个BMW实例,输出实例的name属性值。
3.答案解析
情况一:在父类中添上无参构造,输出汽车
因为父类没有给出无参构造,子类必须要显示调用父类的有参构造,因此会发生编译错误。如果显示调用了父类的有参构造,则调用的是父类的name值,但由于赋值语句是将原值赋值给参数,因此"汽车"并未发生改变,会输出"汽车"。代码如下:
public class Car {
String name = "汽车";
public Car(String name) {
this.name = name;
}
// 加上无参构造
public Car() {}
// 加上main方法
public static void main(String[] args) {
Car bmw = new BMW("宝马X5");
System.out.println(bmw.name);
}
}
class BMW extends Car {
String name = "宝马";
public BMW(String name) {
this.name = name;
}
}
情况二:在子类中显示调用父类有参构造,输出宝马X5
public class Car {
String name = "汽车";
public Car(String name) {
this.name = name;
}
// 加上main方法
public static void main(String[] args) {
Car bmw = new BMW("宝马X5");
System.out.println(bmw.name);
}
}
class BMW extends Car {
String name = "宝马";
public BMW(String name) {
// 显示调用父类有参构造器
super(name);
this.name = name;
}
}
Java构造器练习题的更多相关文章
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- Java SE练习题——求奇数
欢迎来到Java SE练习题频道,我是Fishing,今天我带来的练习题是(做题会有不足之处,可评论,说出更好的方法): 通过键盘输入两个整数,计算这两个整数之间的所有奇数之和,并输出计算结果. 看到 ...
- Java构造器浅析
Java构造器 问题引出 1.先看一段简单创建对象的例子: public class constructTest { public static void main(String[] args) { ...
- JAVA构造器,重载与重写
1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...
- 浅谈Java构造器
Java构造器 每个类都有构造方法.如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法. 在创建一个对象的时候,至少要调用一个构造方法.构造方法的名称必须与类同名,一个类可以 ...
- java构造器级简单内存分析
java构造器的使用(基础篇) 构造方法也叫构造器,是创建对象时执行的特殊方法,一般用于初始化新对象的属性. 基本定义语法: 访问控制符 构造方法名([参数列表]){ 方法体 } 注:"访问 ...
- java构造器
java的构造器不是方法,因为没有返回值. 构造器可以重载. 构造器的访问说明符: private:只有本类可以使用这个构造器. protected:这个类的子类和包中的类都可以使用此构造器. pub ...
- Java构造器和方法的区别
摘要要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别.原作者:Robert Nielsen 原站:www.javawor ...
- JAVA构造器、this、super
构造器是为了创建一个类的实例.这个过程也可以在创建一个对象的时候用到: Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码. 修饰符,返回值和命名的不同 ...
随机推荐
- 如何设置在html中保留超链接格式但不实现跳转
---恢复内容开始--- 老师布置了一个任务,要求用户登录或者不登录都会有一个主页(home.jsp),如果登录的话就会跳转至登录界面(login.jsp),在登录界面中有个验证码,还要求有个和很多登 ...
- LoadRunner遇到的错误及解决方法
1.返回的报文太长: intweb_set_max_html_param_len(const char * length); intweb_set_max_html_param_len(") ...
- .net core 使用 ef core
第一步: 创建一个.net core console app. 第二步:安装EFCore package 和 design(以前vs是有EF项目模板的,core版本现在没有,所有安装这个工具来创建M ...
- jmeter解决request response中文乱码问题
一:主要内容 解决request请求入参中文乱码问题 解决response响应数据中文乱码问题 二:解决request和response中文乱码问题 request结果:-中文已经不乱码了 respo ...
- intelij idea设置成eclipse快捷键
1.导入jar包文件: https://pan.baidu.com/s/1QSd_CY5X_dUUw74evbckXg 密码: 23rq 2.idea -->settting ---> ...
- String 类型equals方法和int == 方法效率比较
最近写了一个递归方法,在进行比较判断的时候,因为都是integer类型,而integer类型在大于127或者小于-128时会在新建一个,这是因为integer类型的拆装箱机制, 之前没有考虑过equa ...
- Oracle物化视图梳理
--物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...
- 黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具
在北京上地的一家咖啡馆里,我在等待黑客 Seeker 的到来. 我对黑客 Seeker 颇有期待.他曾在黑客大会 KCon 上演讲<伪基站高级利用技术——彻底攻破短信验证码>,介绍利用 L ...
- 剑指Offer 42. 和为S的两个数字 (其他)
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...
- springBoot的数据库操作
一:操作数据库起步 1.Spring-Data-Jpa JPA定义了对象持久化的标准. 目前实现了有Hibernate,TopLink 2.pom添加依赖 <dependency> < ...