完成课件中的动手动脑的或需要验证的相关内容。
一.运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!
class Grandparent
{
public Grandparent()
{
System.out.println("GrandParent Created.");
}
public Grandparent(String string)
{
System.out.println("GrandParent Created.String:" + string);
}
}
class Parent extends Grandparent
{
public Parent()
{
//super("Hello.Grandparent.");
System.out.println("Parent Created");
// super("Hello.Grandparent.");
}
}
class Child extends Parent
{
public Child()
{
System.out.println("Child Created");
}
}
public class TestInherits
{
public static void main(String args[])
{
Child c = new Child();
}
}
结论:
通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。
二.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
构造函数(constructor)是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
不能反过来调用也是这个原因,因为父类根本不知道子类有神魔变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!
二.请自行编写代码测试以下特性(动手动脑):在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
class Father{ //父类
public void shuchu(){
System.out.println("调用父类");
}
}
class Son extends Father{ //子类
public void shuchu){
super.shuchu();
System.out.println("调用子类");
}
}
class Override {
public static void main(String[] args){
Son a=new Son();
a.shuchu();
}
}
四.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
m=d;
d=m;
d=(Dog)m;
d=c;
c=(Cat)m;
先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确。
d=m和d=c会编译错误,父类不能直接给子类对象赋值,必须要强制转换,而且两个子类之间没有关系,不能相互赋值。
五.运行以下测试代码
1. 左边的程序运行结果是什么?
1. 你如何解释会得到这样的输出?
前两个就是正常的调用父类和子类,输出相应的myvalue值,第三个是子类把对象赋值给父类,所以输出父类的值,第四个parent.myValue++;改变的是父类的value值,并没有改变子类的值,((Child)parent).myValue++;改变的是子类的值。
2. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?
(1) 当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
(2)这个特性实际上就是面向对象“多态”特性的具体表现。
(3)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
(4)如果子类被当作父类使用,则通过子类访问的字段是父类的!
转载于:https://www.cnblogs.com/zhmbg/p/7815294.html
完成课件中的动手动脑的或需要验证的相关内容。相关推荐
- 课程作业02——课程中的动手动脑问题
1.为什么double类型的数值进行运算得不到"数学上精确"的结果? 结论:使用double类型的数值进行计算,其结果是不精确的. 原因:double类型的数值占用64bit,即6 ...
- JAVA课上动手动脑问题以及课后测试1,2总结
课堂测试1 像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 "软件" 2 (1)题目避免重复 (2)可定制(数量/打印方式) 设计思路 1)产生两 ...
- 的计时器设置_【教程】PPT课件中常见的计时器效果(2)——沙漏式计时器 | 源文件提供下载...
往期推荐: [教程]几种常见的计时器效果(1)| 源文件提供下载 [资源]统编语文1-6年级上册专项复习练习题 [资源]转发起来!超精美全册课件下载 | 统编版小学语文五年级下册 大家好,这里是小课同 ...
- JAVA语法基础 动手动脑及课后作业
动手动脑1: 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ar ...
- 04-异常处理-动手动脑
1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*;classAboutExcepti ...
- 动手动脑-Java重载
有以下例子: 例: Using overloaded methods public class MethodOverload { public static void main(String[] ar ...
- 04_类与对象_课程动手动脑问题以及课后实验性问题及解答集锦
Answer: 动手动脑: 1--以下代码为何无法通过编译?哪儿出错了? Answer: 因为类Foo的构造函数是有一个参数的,所以我们在new一个Foo类的对象时必须赋予一个符合条件的实参. 2-- ...
- 动手动脑及课后实践3
1. 动手动脑1: (一)运行结果: 分析原因:在Java中,内容相同的字串常量("Hello")只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象. 编译器 ...
- 第三次实验及动手动脑
//第一个动手动脑 package 动手动脑3;public class ClassAndObjectTest {public static void main(String[] args) {//创 ...
最新文章
- 总结FormsAuthentication的使用
- FineUI小技巧(5)向子窗口传值,向父窗口传值
- 2021 RoboCom 世界机器人开发者大赛-本科组(初赛)【完结】
- 13.IDA-显示正确的函数名称(去掉c++后缀命名)
- 机器学习实战的P264中代码对应的公式推导
- 数学--数论--HDU1222 狼和兔子(最大公约数)
- putty连接linux上传python,通过PuTTY用于SSH的Python脚本
- Ubuntu apt update(apt-get update)报错、失败
- 三个变量中怎么找出中间值_scratch图形化编程基础练习-变量交换
- Codeforces Round #655 (Div. 2) B C
- java 植入 form_pdf form表单制作以及用java程序填充表单
- linux egrep和grep区别,linux中grep和fgrep有什么区别
- Java集合容器面试题(2020最新版),深入理解linux内核百度网盘
- sql语句练习(1) 含问题,答案,数据库表,数据
- 假设检验一小些知识(单个正态总体均值的假设检验)
- Jeff Dean 的传奇人生:超级工程师们拯救谷歌
- c9大学计算机系好的大学,C9顶尖高校所有自主招生专业大汇总
- 大三学生关于实习和考研的安排
- PDF转长图片怎么转?不妨试试这个方法
- 暗刺,高并发五个利器
热门文章
- fiq中断的入口地址_FIQ和IRQ区别
- #{}不自动改参数类型_Spring参数的自解析还在自己转换?你out了!
- 用for循环打印出九九乘法表
- java基础01-java历史
- JAVA高性能内存队列-disruptor
- java 将小数度数转换为度分秒格式
- Maven依赖junit @Test报错解决
- 让员工、用户粉丝化,从选好社区软件开始
- 在docker for win中使用portainer管理容器
- 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇