CS61B srping 2018 disc04 https://sp18.datastructur.es/

extends(扩展) 和 override(重写)

extends 关系导致的类型,子类一定是父类,父类一定不是子类。
就赋值而言, 父类 a= 子类 b 是 ok的 ;反过来 子类 x = 父类 y;是不ok的, 也就是说赋值时,类型层级上,右边一定是小于(低于)左边的。
给定 Animal 类,填写 Cat 类的定义,以便在greet()被调用时,“Cat”(而不是“Animal”)被打印到屏幕上。如果猫是 5 岁或以上,“Meow”,5岁以下,则会发出噪音并发出“MEOW”。

1. Animal
public class Animal {
protected String name, noise;
protected int age;public Animal(String name, int age) {
this.name = name;
this.age = age;
this.noise = "Huh?";
}public String makeNoise() {
if (age < 5) {
return noise.toUpperCase();
} else {
return noise;
}
}public void greet() {
System.out.println("Animal " + name + " says: " + makeNoise());
}
}
2.Cat
public class Cat extends Animal {public Cat(String name, int age) {super(name, age);this.noise = "Meow!";}@Overridepublic void greet() {System.out.println("Cat " + name + " says: " + makeNoise());}public static void main(String[] args) {Cat babyCat = new Cat("babyCat",1);Cat bigCat = new Cat("bigCat",5);//        MEOW!babyCat.greet();
//        Meow!bigCat.greet();}
}

extends 和override 2

对上面的 Animal和Cat ,给出下列程序运行结果:
1 public class TestAnimals {
2 public static void main(String[] args) {
3 Animal a = new Animal("Pluto", 10);
4 Cat c = new Cat("Garfield", 6);
5 Dog d = new Dog("Fido", 4);
6
7 a.greet(); // (A)___Pluto says Huh?___________________
8 c.greet(); // (B)___Garfield says Meow!___________________
9 d.greet(); // (C)___Fido says WOOF!___________________
10 a = c;
11 ((Cat) a).greet(); // (D) ______Garfield says Meow!________________
12 a.greet(); // (E) _______Garfield says Meow!_______________
13 }
14 }
15
16 public class Dog extends Animal {
17 public Dog(String name, int age) {
18 super(name, age);
19 noise = "Woof!";
20 }
21
22 @Override
23 public void greet() {
24 System.out.println("Dog " + name + " says: " + makeNoise());
25 }
26
27 public void playFetch() {
28 System.out.println("Fetch, " + name + "!");
29 }
30 }
如果在上述程序第12行下面加下面语句,会出现什么情况?如果出现了编译错误,为什么?怎么改?
1 a = new Dog("Spot", 10);
2 d = a;

答:

1 a = new Dog("Spot", 10); //没问题, Dog 可以看做是Animal,
2 d = a;                  //有问题, Animal 不是一个Dog, 上位不是下位。

答:

Dog is a subclass of Animal, so this assignment will
fail at compile time because not all Animals are Dogs. Use casting to address the
problem. 因为不是所有的Animal 都是 Dog ,上位词包含更多不一定是更具体的下位。
也就是右边一定要小于左边。
1 d = (Dog) a;
This represents a promise to the compiler that at runtime, a will be bound to an
object that is compatible with the Dog type.

3 找出下列程序的潜在错误并记录,消除这些错误后,D的运行结果是什么?

1 class A {
2 public int x = 5;
3 public void m1() {System.out.println("Am1-> " + x);}
4 public void m2() {System.out.println("Am2-> " + this.x);}
5 public void update() {x = 99;}
6 }
7 class B extends A {
8 public void m2() {System.out.println("Bm2-> " + x);}
9 public void m2(int y) {System.out.println("Bm2y-> " + y);}
10 public void m3() {System.out.println("Bm3-> " + "called");}
11 }
12 class C extends B {
13 public int y = x + 1;
14 public void m2() {System.out.println("Cm2-> " + super.x);}
15 \\ public void m4() {System.out.println("Cm4-> " + super.super.x); }} can't do super.super
16 public void m5() {System.out.println("Cm5-> " + y);}
17 }
18 class D {
19 public static void main (String[] args) {
20 \\ B a0 = new A(); Dynamic type must be B or subclass of B
21 \\ a0.m1(); cascading: prev line failed, so a0 can't be initialized
22 \\ a0.m2(16); cascading: prev line failed, so a0 can't be initialized
23 A b0 = new B();
24 System.out.println(b0.x); [prints "5"]
25 b0.m1(); [prints "Am1-> 5"]
26 b0.m2(); [prints "Bm2-> 5"]
27 \\ b0.m2(61); m2 (int y) not defined in static type of b0
28 B b1 = new B();
29 b1.m2(61); [prints "Bm2y-> 61"]
30 b1.m3(); [prints "Bm3-> called"]
31 A c0 = new C();
32 c0.m2(); [prints "cm2-> 5"]
33 \\ C c1 = (A) new C(); Can't assign c1 to an A
34 A a1 = (A) c0;
35 C c2 = (C) a1;
36 c2.m3(); [print Bm3-> called]
37 \\ c2.m4(); C.m4() is invalid
38 c2.m5(); [print Cm5-> 6]
39 ((C) c0).m3(); [print Bm3-> called]
40 \\ (C) c0.m3(); NOT RUNTIME ERROR This would case the result of what the method returns and
it returns void therefore compile-time error
41 b0.update();
42 b0.m1(); [print Am1-> 99]
43 }
44 }

第四题不会做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867893.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab贝叶斯估计MCMC分析药物对不同种群生物生理指标数据评估可视化

全文链接:https://tecdat.cn/?p=38756 原文出处:拓端数据部落公众号 摘要:本文着重探讨了如何利用Matlab实现贝叶斯估计。阐述了具体的实现流程,涵盖数据加载、先验常数设定、马尔可夫链蒙特卡洛(MCMC)属性指定、模型构建、运行链条以及结果查看等环节,通过展示相应的代…

【专题】2024年电商报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=38770 在当今数字化浪潮汹涌澎湃的时代背景下,电商行业已然成为全球经济格局中极具影响力与活力的关键领域。 从中国电商市场的增长压力与结构变化,到各类促销活动背后的消费者行为逻辑;从不同平台内容创作者生态的差异化表现,再到跨境出…

Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比

全文链接:https://tecdat.cn/?p=38726 原文出处:拓端数据部落公众号 分析师:Qingxia Wang 在能源领域,精准预测能源消费总量对制定合理能源战略至关重要。当前,能源消费预测分析主要运用单一模型(如灰色预测法、时间序列分析法等)和组合模型两种方式。然而,单一模型存…

Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析

全文链接:https://tecdat.cn/?p=38742 原文出处:拓端数据部落公众号 分析师:Zhixiong Weng人们每时每刻都离不开氧,并通过吸入空气而获得氧。一个成年人每天需要吸入空气达6500升以获得足够的氧气,因此,被污染了的空气对人体健康有直接的影响,空气品质对人的影响更是至…

如何选择和使用专业的代码修改服务?

如果您不具备编程技能,或者项目复杂度较高,选择一家可靠的代码修改服务提供商是明智之举。 解决方案:评估需求:明确您需要修改的具体内容和期望达到的效果。 选择服务商:通过在线平台或口碑推荐寻找信誉良好的服务商。查看他们的案例和客户评价。 沟通需求:与服务商详细沟…

前端加密对抗-1

在实习的时候遇到很多的项目都使用了加密来保护安全性,测试起来非常的费劲;然后最近看到了有这么一个前端加密靶场,利用这个靶场来多学习学习这方面的知识。改包的防范 目前流行的防止改包方式主要是这么几个方面请求参数和路径的加密 如果原始请求是GET请求,或防止访问者获…

如何在CentOS云服务器上一键自动挂载磁盘?

对于新手来说,通过命令行手动挂载磁盘可能会有一定的难度。幸运的是,使用宝塔面板的一键挂载脚本可以简化这个过程。该脚本经过优化,直接绑定UUID以避免分区飘移问题,并能自动将硬盘挂载到/www目录。如果之前已经安装了宝塔面板,脚本会自动迁移数据到新的磁盘并挂载到/www…

WordPress需要在什么环境下运行?

WordPress 是一个基于 PHP 语言和 MySQL 数据库管理系统构建的开源内容管理系统(CMS)。为了确保 WordPress 网站能够稳定、高效地运行,您需要为其提供合适的运行环境。以下是详细的环境要求和建议: 一、WordPress 运行环境要求组件 推荐配置 说明Web服务器 Apache 或 Nginx…

网站SSL证书有什么用?什么情况下需要申请SSL证书?

网站SSL证书在保障网站安全和提升用户体验方面扮演着重要角色。以下是SSL证书的主要用途和申请需求的详细说明。 一、网站SSL证书的作用 1. 数据加密传输作用:SSL证书确保用户浏览器和服务器之间的数据传输是加密的,防止第三方窃取敏感信息,如登录密码、支付数据等。 重要性…

dedecms上传图片附件失败的原因和解决办法

dedecms上传图片附件失败可能是由于以下几个原因导致的:目录权限问题:检查网站目录权限是否可写(uploads目录或后台定义的上传目录)。 文件大小限制:检查上传图片大小是否超过php.ini中定义的大小。 子目录缺失:检查上传图片附件目录中的子目录是否存在,如allimg、flink…

独立IP虚拟主机相较于共享IP虚拟主机有哪些优势?

独立IP虚拟主机与传统共享IP虚拟主机相比,具有显著的优势。在共享IP环境中,多个网站共用一个IP地址,而独立IP虚拟主机为每个网站分配唯一的IP地址。以下是独立IP虚拟主机的主要优势: 1. 更高的稳定性资源独享:由于每个网站拥有独立的IP地址,因此不会受到其他网站的影响。…