1.运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

package继承;classGrandparent

{publicGrandparent()

{

System.out.println("GrandParent Created.");

}publicGrandparent(String string)

{

System.out.println("GrandParent Created.String:" +string);

}

}class Parent1 extendsGrandparent

{publicParent1()

{//super("Hello.Grandparent.");

System.out.println("Parent Created");//super("Hello.Grandparent.");

}

}class Child1 extendsParent1

{publicChild1()

{

System.out.println("Child Created");

}

}public classTestInherits

{public static voidmain(String args[])

{

Child1 c= newChild1();

}

}

运行截图:

2.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

构造函数(constructor)是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。不能反过来调用也是这个原因,因为父类根本不知道子类有什么变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!

3.现在有三个类: class Mammal{}

class Dog extends Mammal {}

class Cat extends Mammal{}

针对每个类定义三个变量并进行初始化 Mammal m=null ; Dog d=new Dog(); Cat c=new Cat();

下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m;

①d=m;②d=c;③c=(Cat)m

①子类对象可以直接赋给基类变量。基类对象要赋给子类对象变量,必须执行类型转换,②其语法是:子类对象变量=(子类名)基类对象名;

③转换混乱。如果类型转换失败Java会抛出以下这种异常:ClassCastException

4.参看ExplorationJDKSource.java示例

此示例中定义了一个类A,它没有任何成员: class A { }

示例直接输出这个类所创建的对象 public static void main(String[] args) { System.out.println(new A()); }

public classExplorationJDKSource {/***@paramargs*/

public static voidmain(String[] args) {

System.out.println(newA());

}

}class A{}

运行截图:

valueOf方法内部又调用Object.toString方法:

public String toString() {

return getClass().getName() +"@" +

Integer.toHexString(hashCode());

}

5.来看一段代码(示例Fruit.java ):

注意最后一句,一个字串和一个对象“相加”,得到以下结果:

public classFruit

{publicString toString()

{return "Fruit toString.";

}public static voidmain(String args[])

{

Fruit f=newFruit();

System.out.println("f="+f);

System.out.println("f="+f.toString());

}

}

运行结果:

6.运行以下测试代码

1. 左边的程序运行结果是什么?

2. 你如何解释会得到这样的输出?

3. 计算机是不会出错的,之所以得 到这样的运行结果也是有原因的, 那么从这些运行结果中,你能总 结出Java的哪些语法特性?

1.运行结果:

2.通过强制类型转换子类的字符将父类的字符覆盖了

3.当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

如果子类被当作父类使用,则通过子类访问的字段是父类的。

7.思索: 这种编程方式有什么不合理的地方吗?

public classZoo {public static voidmain(String args[]) {

Feeder f= new Feeder("��");

Animal[] ans= new Animal[16];//����ԱС��ι��һֻʨ��

ans[0] = newLion();//����ԱС��ι��ʮֻ����

for (int i = 0; i < 10; i++) {

ans[1 + i] = newMonkey();

}//����ԱС��ι��5ֻ����

for (int i = 0; i < 5; i++) {

ans[11 + i] = newPigeon();

}

f.feedAnimals(ans);

}

}classFeeder {publicString name;

Feeder(String name) {this.name =name;

}public voidfeedAnimals(Animal[] ans) {for(Animal an : ans) {

an.eat();

}

}

}abstract classAnimal {public abstract voideat();

}class Lion extendsAnimal {public voideat() {

System.out.println("�Ҳ�����˭�ҳ��⣡");

}

}class Monkey extendsAnimal {public voideat() {

System.out.println("��ʲô���ԣ�����ϲ���㽶��");

}

}class Pigeon extendsAnimal {public voideat() {

System.out.println("��Ҫ���ʣ�����ÿ��ֻ��һ����ס�");

}

}

运行结果:

java继承与多态 心得体会_继承与多态感想相关推荐

  1. java 绘制图形实验心得体会_绘图实习心得体会3篇

    所谓绘图,就是绘制图片.图纸的意思.通常用于建筑绘图,产品绘制等等.下面是学习啦,为大家准备的绘图实习心得体会范文,希望大家喜欢! 本以为暑期实习能走出校门到外面游历见识一番,却不知所谓的实习只是呆在 ...

  2. 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想

    计算机网络是很复杂的一个事务,进行计算机网络实验是为了提升用户使用需求.下面是学习啦带来的计算机网络实验的心得体会,仅供参考. 计算机网络实验心得体会篇一 计算机网络课程的实验不同于以前做过的C语言上 ...

  3. Java创新创业讲座心得体会_基于Java?Web的创新创业管理系统设计与实现

    第16卷 第2期 201 7年2月 软 件 导 刊 Softw arc Guide Vo1.16NO.2 Feb.20l7 基于 Java Web的创新创业管理系统设计与实现 张 泽 ,雷光 波 (湖 ...

  4. 学习java的心得体会_学习java的心得体会范文.doc

    学习java的心得体会范文 篇一:JAVA学习的心得体会 ? 国家队每一次踢球失败后都要说这么一句:我们回去后要好好总结,下次会打得更好! ? 总结不代表就能改过原有的不足,也不代表就能进步了 ? ( ...

  5. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  6. java继承和接口的区别_继承和实现接口的区别

    1,java类可以一次继承多个接口,用implements 接口1,接口2 2,如果是接口继承接口的话也可以用extends,接口是多继承的,java类才是单继承 3,接口继承接口可以不实现父接口中的 ...

  7. java继承案例分析_Java面向对象_继承——基本概念以及管理化妆品实例分析

    一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...

  8. 听java技术讲座心得体会_听讲座心得体会范文3篇

    讲座,是由教师不定期地向学生讲授与学科有关的科学趣闻或新的发展,以扩大他们知识的一种教学活动形式.下面是学习啦带来的听讲座心得体会范文,欢迎大家阅读. 篇一:听讲座心得体会范文 在危险面前是怕死的,总 ...

  9. 听java技术讲座心得体会_听讲座心得体会范文(精选3篇)

    听讲座心得体会范文(精选3篇) 当在某些事情上我们有很深的体会时,写心得体会是一个不错的选择,这样就可以通过不断总结,丰富我们的思想.你想好怎么写心得体会了吗?以下是小编精心整理的听讲座心得体会范文( ...

最新文章

  1. 【廖雪峰Python学习笔记】高阶函数
  2. 重新安装nginx注意事项
  3. 交换机运维需要注意哪些问题,让我们一起来闲聊下
  4. 配置VMware ESXi 5事件发送到SYSLOG服务器
  5. 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...
  6. 《Effective Java》学习笔记 第二章 创建和销毁对象
  7. JavaOne美国之行–走势篇
  8. k8s 为何成为大厂标配?
  9. 使用Optuna的XGBoost模型的高效超参数优化
  10. 把数据集刷穿是什么体验?MetaQA已100%准确率
  11. python实现关键词提取
  12. Visual Assist插件使用的一些相关文章
  13. base64编码将字符串转换为图片
  14. 北京邮电大学计算机考研拟录取名单,北京邮电大学研究生拟录取名单2021公示...
  15. 立而不破,华为云注解政企智能升级的“道与术”
  16. TypeError: Image data of dtype object cannot be converted to float
  17. vbox虚拟机和vm虚拟机 虚拟机网络不通的解决方法
  18. 08-sketch插件
  19. python tkinter 窗口颜色--数据和名称
  20. tensorflow代码学习:CTC 代码解析

热门文章

  1. 太原理工大学ICPC队介绍(2021版)
  2. Bailian2799 浮点数格式【文本处理+最值】
  3. UVA10978 Let's Play Magic!【模拟】
  4. CCF201604-4 游戏(100分)
  5. HDU2006 求奇数的乘积【入门】
  6. 20 世纪 10 大算法
  7. 二次型(求梯度) —— 公式的简化
  8. 无处不在的黄金分割比
  9. 机器学习基础(七)——sigmoid 函数的性质
  10. C++基础::拾遗琐碎