创建一个robent数组,php 填充数组不同的rodent类型,然后调用基类方法,观察发生什么情况

Java程序设计实验报告 哈工大_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Java程序设计实验报告 哈工大
&&Java程序设计实验报告 哈工大
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩30页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
java面向对象技术实验(新)
下载积分:1500
内容提示:java面向对象技术实验(新)
文档格式:PPT|
浏览次数:19|
上传日期: 18:17:10|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
java面向对象技术实验(新)
官方公共微信Java今日代码(16)
小白做课后习题,有不对的地方或者不好的地方多多包容。
1. 在基类Shapes.java中添加一个新方法,用于打印一条消息,但导出类中不要覆盖这个方法。请解释发生了什么。现在,在其中一个导出类中覆盖该方法,而在其他的导出类中不予覆盖,观察又有什么发生。最后,在所有的导出类中覆盖此方法。
import java.util.R
class Shape{
void draw(){}
void erase(){}
void say(){
System.out.println(&Shape.say()&);
class Circle extends Shape{
void draw(){
System.out.println(&Circle.draw()&);
void erase(){
System.out.println(&Circle.erase()&);
void say(){
System.out.println(&Circle.say()&);
class Triangle extends Shape{
void draw(){
System.out.println(&Triangle.draw()&);
void erase(){
System.out.println(&Triangle.erase()&);
void say(){
System.out.println(&Triangle.say()&);
class RandomShapeGenerator{
private Random rand = new Random();
public Shape get(){
switch(rand.nextInt(3)){
case 1: return new Circle();
case 2: return new Triangle();
public class Shapes {
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args){
Shape[] s = new Shape[6];
for(int i = 0; i & s. i++)
s[i] = gen.get();
for(int i = 0; i & s. i++){
s[i].say();
s[i].draw();
输出结果:
Circle.say()
Circle.draw()
Circle.say()
Circle.draw()
Triangle.say()
Triangle.draw()
Triangle.say()
Triangle.draw()
Circle.say()
Circle.draw()
Circle.say()
Circle.draw()
2. 向Shapes.java中添加一个新的Shape类型,并在main()方法中验证:多态对新类型的作用是否与在旧类型中的一样。
import java.util.R
class Shape{
void draw(){}
void erase(){}
void say(){
System.out.println(&Shape.say()&);
class Circle extends Shape{
void draw(){
System.out.println(&Circle.draw()&);
void erase(){
System.out.println(&Circle.erase()&);
void say(){
System.out.println(&Circle.say()&);
class Square extends Shape{
void draw(){
System.out.println(&Square.draw()&);
void erase(){
System.out.println(&Square.erase()&);
void say(){
System.out.println(&Square.say()&);
class Triangle extends Shape{
void draw(){
System.out.println(&Triangle.draw()&);
void erase(){
System.out.println(&Triangle.erase()&);
void say(){
System.out.println(&Triangle.say()&);
class RandomShapeGenerator{
private Random rand = new Random();
public Shape get(){
switch(rand.nextInt(3)){
case 1: return new Circle();
case 2: return new Triangle();
public class Shapes {
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args){
Shape[] s = new Shape[6];
Shape a = new Square();
a.erase();
for(int i = 0; i & s. i++)
s[i] = gen.get();
for(int i = 0; i & s. i++){
s[i].say();
s[i].draw();
输出结果:
Square.draw()
Square.erase()
Square.say()
Circle.say()
Circle.draw()
Circle.say()
Circle.draw()
Circle.say()
Circle.draw()
Circle.say()
Circle.draw()
Triangle.say()
Triangle.draw()
Triangle.say()
Triangle.draw()
3.创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠),等等这样一个的继承层次结构。在基类中,提供对所有的Rodent都通用的方法,在导出类中,根据特定的Rodent类型覆盖这些方法,以便它们执行不同的行为。创建一个Robent数组,填充不同的Rodent类型,然后调用基类方法,观察发生什么情况。
import java.util.R
class Rodent{
void foot(){}
void say(){}
class Mouse extends Rodent{
void foot(){
System.out.println(&four&);
void say(){
System.out.println(&ZZ&);
class Gerbil extends Rodent{
void foot(){
System.out.println(&doubletwo&);
void say(){
System.out.println(&CC&);
class Hamster extends Rodent{
void foot(){
System.out.println(&twodouble&);
void say(){
System.out.println(&BB&);
public class Rodents {
static Random rand = new Random();
public static Rodent get(){
switch(rand.nextInt(3)){
case 0: return new Mouse();
case 1: return new Gerbil();
case 2: return new Hamster();
public static void main(String[] args){
Rodent[] rodent = new Rodent[4];
for(int i = 0; i & rodent. i++)
rodent[i] = get();
for(int i = 0; i & rodent. i++){
rodent[i].foot();
rodent[i].say();
输出结果:
4.修改练习3,使之能够演示基类和导出类的初始化顺序。然后向基类和导出类中添加成员对象,并说明构建期间初始化发生的顺序。
import java.util.R
class Rodent{
private String father = &father&;
System.out.println(father);
void foot(){}
void say(){}
class Mouse extends Rodent{
private String son = &son&;
System.out.println(son);
void foot(){
System.out.println(&four&);
void say(){
System.out.println(&ZZ&);
class Gerbil extends Rodent{
private String daught = &daught&;
System.out.println(daught);
void foot(){
System.out.println(&doubletwo&);
void say(){
System.out.println(&CC&);
public class Rodents {
public static void main(String[] args){
Rodent m = new Mouse();
Rodent g = new Gerbil();
输出结果:
5.创建一个包含两个方法的基类。在第一方法中可以调用第二个方法。然后产生一个继承自该基类的导出类,且覆盖基类中的第二个方法。为该导出类创建一个对象,将它向上转型到基类型并调用第一个方法,解释发生的情况。
System.out.println(&World&);
System.out.print(&Hello&);
public class C extends A{
System.out.print(&Java&);
& & public static void main(String[] args){
& & A a = new C();
& & a.a();
输出结果:
6.创建一个基类,让它包含抽象方法print(),并在导出类中覆盖该方法。覆盖后的方法版本可以打印导出类中定义的某个整型变量的值。在定义该变量之处,赋予它非零值。在基类的构造器中调用这个方法。现在,在main()方法中,创建一个导出类对象,然后调用它的print()方法。
abstract class A{
& &abstract void print();
public class C extends A{
private static int i = 123;
void print(){
System.out.println(i);
& & public static void main(String[] args){
& & C c = new C();
& & c.print();
输出结果:
7.创建一个Starship类,包含一个AlertStatus引用,此引用可以指示三种不同的状态。纳入一些可以改变这些状态的方法。
import java.util.R
class AlertStatus{
void say(){}
class Happy extends AlertStatus{
void say(){
System.out.println(&Happy&);
class Sad extends AlertStatus{
void say(){
System.out.println(&Sad&);
class Angry extends AlertStatus{
void say(){
System.out.println(&Angry&);
public class Starship {
public static AlertStatus change(){
Random rand = new Random();
switch(rand.nextInt(2)){
case 0: return new Sad();
case 1: return new Angry();
public static void main(String[] args){
AlertStatus status = new Happy();
status.say();
status = change();
status.say();
输出结果:
8.创建一个不包含任何方法的抽象类,从它那里导出一个类,并添加一个方法。创建一个静态方法,它可以接受指向基类的引用,将其向下转型到导出类,然后再调用该静态方法。在main()中,展现它的运行情况。然后,为基类中的方法加上abstract 声明,这样就不再需要进行向下转型。
未加abstract之前:
abstract class A{
public class C extends A{
public void print(){
System.out.println(&Java&);
public static void stright(A a){
((C)a).print();
& & public static void main(String[] args){
& & A a = new C();
& & stright(a);
输出结果:
加入abstract之后:
abstract class A{
abstract &void print();
public class C extends A{
public void print(){
System.out.println(&Java&);
public static void stright(A a){
((C)a).print();
a.print();
& & public static void main(String[] args){
& & A a = new C();
& & stright(a);
输出结果:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:35762次
排名:千里之外
原创:41篇
转载:59篇
(1)(9)(33)(26)(32)小白做课后习题,有不对的地方或者不好的地方多多包容。1. 在基类Shapes.java中添加一个新方法,用于打印一条消息,但导出类中不要覆盖这个方法。请解释发生了什么。现在,在其中一个导出类中覆盖该方法,而在其他的导出类中不予覆盖,观察又有什么发生。最后,在所有的导出类中覆盖此方法。import java.util.Rclass Shape{void draw(){}void erase(){}void say(){System.out.println("Shape.say()");}}class Circle extends Shape{void draw(){System.out.println("Circle.draw()");}void erase(){System.out.println("Circle.erase()");}void say(){System.out.println("Circle.say()");}}class Triangle extends Shape{void draw(){System.out.println("Triangle.draw()");}void erase(){System.out.println("Triangle.erase()");}void say(){System.out.println("Triangle.say()");}}class RandomShapeGenerator{private Random rand = new Random();public Shape get(){switch(rand.nextInt(3)){default:case 1: return new Circle();case 2: return new Triangle();}}}public class Shapes {private static RandomShapeGenerator gen = new RandomShapeGenerator();public static void main(String[] args){Shape[] s = new Shape[6];for(int i = 0; i & s. i++)s[i] = gen.get();for(int i = 0; i & s. i++){s[i].say();s[i].draw();}
}}输出结果:Circle.say()Circle.draw()Circle.say()Circle.draw()Triangle.say()Triangle.draw()Triangle.say()Triangle.draw()Circle.say()Circle.draw()Circle.say()Circle.draw()2. 向Shapes.java中添加一个新的Shape类型,并在main()方法中验证:多态对新类型的作用是否与在旧类型中的一样。import java.util.Rclass Shape{void draw(){}void erase(){}void say(){System.out.println("Shape.say()");}}class Circle extends Shape{void draw(){System.out.println("Circle.draw()");}void erase(){System.out.println("Circle.erase()");}void say(){System.out.println("Circle.say()");}}class Square extends Shape{void draw(){System.out.println("Square.draw()");}void erase(){System.out.println("Square.erase()");}void say(){System.out.println("Square.say()");}}class Triangle extends Shape{void draw(){System.out.println("Triangle.draw()");}void erase(){System.out.println("Triangle.erase()");}void say(){System.out.println("Triangle.say()");}}class RandomShapeGenerator{private Random rand = new Random();public Shape get(){switch(rand.nextInt(3)){default:case 1: return new Circle();case 2: return new Triangle();}}}public class Shapes {private static RandomShapeGenerator gen = new RandomShapeGenerator();public static void main(String[] args){Shape[] s = new Shape[6];Shape a = new Square();a.draw();a.erase();a.say();for(int i = 0; i & s. i++)s[i] = gen.get();for(int i = 0; i & s. i++){s[i].say();s[i].draw();}
}}输出结果:Square.draw()Square.erase()Square.say()Circle.say()Circle.draw()Circle.say()Circle.draw()Circle.say()Circle.draw()Circle.say()Circle.draw()Triangle.say()Triangle.draw()Triangle.say()Triangle.draw()3.创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠),等等这样一个的继承层次结构。在基类中,提供对所有的Rodent都通用的方法,在导出类中,根据特定的Rodent类型覆盖这些方法,以便它们执行不同的行为。创建一个Robent数组,填充不同的Rodent类型,然后调用基类方法,观察发生什么情况。import java.util.Rclass Rodent{void foot(){}void say(){}}class Mouse extends Rodent{void foot(){System.out.println("four");}void say(){System.out.println("ZZ");}}class Gerbil extends Rodent{void foot(){System.out.println("doubletwo");}void say(){System.out.println("CC");}}class Hamster extends Rodent{void foot(){System.out.println("twodouble");}void say(){System.out.println("BB");}}public class Rodents {static Random rand = new Random();public static Rodent get(){switch(rand.nextInt(3)){default:case 0: return new Mouse();case 1: return new Gerbil();case 2: return new Hamster();}}public static void main(String[] args){Rodent[] rodent = new Rodent[4];for(int i = 0; i & rodent. i++)rodent[i] = get();for(int i = 0; i & rodent. i++){rodent[i].foot();rodent[i].say();}}}输出结果:twodoubleBBfourZZdoubletwoCCtwodoubleBB4.修改练习3,使之能够演示基类和导出类的初始化顺序。然后向基类和导出类中添加成员对象,并说明构建期间初始化发生的顺序。import java.util.Rclass Rodent{private String father = "father";Rodent(){System.out.println(father);}void foot(){}void say(){}}class Mouse extends Rodent{private String son = "son";Mouse(){System.out.println(son);}void foot(){System.out.println("four");}void say(){System.out.println("ZZ");}}class Gerbil extends Rodent{private String daught = "daught";Gerbil(){System.out.println(daught);}void foot(){System.out.println("doubletwo");}void say(){System.out.println("CC");}}public class Rodents {public static void main(String[] args){Rodent m = new Mouse();Rodent g = new Gerbil();}}输出结果:fathersonfatherdaught5.创建一个包含两个方法的基类。在第一方法中可以调用第二个方法。然后产生一个继承自该基类的导出类,且覆盖基类中的第二个方法。为该导出类创建一个对象,将它向上转型到基类型并调用第一个方法,解释发生的情况。class A{void a(){b();System.out.println("World");}void b(){System.out.print("Hello");}}public class C extends A{void b(){System.out.print("Java");}
public static void main(String[] args){
A a = new C();
a.a();} }输出结果:JavaWorld6.创建一个基类,让它包含抽象方法print(),并在导出类中覆盖该方法。覆盖后的方法版本可以打印导出类中定义的某个整型变量的值。在定义该变量之处,赋予它非零值。在基类的构造器中调用这个方法。现在,在main()方法中,创建一个导出类对象,然后调用它的print()方法。abstract class A{A(){print();}
abstract void print();}public class C extends A{private static int i = 123;void print(){System.out.println(i);}
public static void main(String[] args){
C c = new C();
c.print();} }输出结果:1231237.创建一个Starship类,包含一个AlertStatus引用,此引用可以指示三种不同的状态。纳入一些可以改变这些状态的方法。import java.util.Rclass AlertStatus{void say(){}}class Happy extends AlertStatus{void say(){System.out.println("Happy");}}class Sad extends AlertStatus{void say(){System.out.println("Sad");}}class Angry extends AlertStatus{void say(){System.out.println("Angry");}}public class Starship {public static AlertStatus change(){Random rand = new Random();switch(rand.nextInt(2)){default:case 0: return new Sad();case 1: return new Angry();}}public static void main(String[] args){AlertStatus status = new Happy();status.say();status = change();status.say();}}输出结果:HappySad或者:HappyAngry8.创建一个不包含任何方法的抽象类,从它那里导出一个类,并添加一个方法。创建一个静态方法,它可以接受指向基类的引用,将其向下转型到导出类,然后再调用该静态方法。在main()中,展现它的运行情况。然后,为基类中的方法加上abstract 声明,这样就不再需要进行向下转型。未加abstract之前:abstract class A{ }public class C extends A{public void print(){System.out.println("Java");}public static void stright(A a){((C)a).print();}
public static void main(String[] args){
A a = new C();
stright(a);}}输出结果:java加入abstract之后:abstract class A{abstract
void print();}public class C extends A{public void print(){System.out.println("Java");}public static void stright(A a){((C)a).print();a.print();}
public static void main(String[] args){
A a = new C();
stright(a);}输出结果:JavaJava
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 16:50收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1}

我要回帖

更多关于 数组填充 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信