实验11-类继承与接口(三)
- 格式:pdf
- 大小:103.31 KB
- 文档页数:10
继承与接口实验报告
实验目的:掌握Java中继承与接口的基本概念和使用方法,能够灵活运用继承和接口设计类和实现多态。
实验环境:Java语言编译器和JDK环境。
实验步骤:
1. 创建一个父类Animal,包含属性name和age,以及方法eat()和sleep()。
2. 创建两个子类Cat和Dog,继承自Animal类。
在子类中重写父类的方法,并添加特有的方法和属性。
3. 创建一个接口Jumpable,包含方法jump()。
4. 在Cat类中实现Jumpable接口,使其具有跳跃的能力。
5. 创建一个测试类Test,通过实例化Cat和Dog对象,调用它们的方法进行测试。
实验结果:
1. 父类Animal成功创建,子类Cat和Dog成功继承父类,并添加特有的方法和属性。
2. 接口Jumpable成功创建,并被Cat类实现。
3. 测试类Test成功实例化Cat和Dog对象,并调用它们的方法进行测试。
实验结论:
1. 继承是Java中实现代码重用的重要手段,通过继承可以快速创建具有相似特性的子类。
2. 接口是Java中实现多态的重要手段,通过接口可以使类具有更多的行为特性。
3. 在实际开发中,应根据需求灵活运用继承和接口,设计出合理的类结构和实现多态的方式。
java实验报告类的继承一、实验目的1、深入理解 Java 中类的继承概念和机制。
2、掌握通过继承实现代码复用和功能扩展。
3、学会使用 super 关键字和方法重写。
二、实验环境1、操作系统:Windows 102、开发工具:Eclipse 或 IntelliJ IDEA三、实验内容1、创建一个父类`Animal`包含属性:`name`(字符串类型),`age`(整数类型)包含方法:`eat()`(打印出动物正在吃东西),`sleep()`(打印出动物正在睡觉)2、创建子类`Dog` 继承自`Animal`新增属性:`breed`(字符串类型,表示狗的品种)重写父类的`eat()`方法,打印出狗吃东西的特有方式新增方法:`bark()`(打印出狗在叫)3、创建子类`Cat` 继承自`Animal`新增属性:`color`(字符串类型,表示猫的颜色)重写父类的`sleep()`方法,打印出猫睡觉的特有姿势新增方法:`meow()`(打印出猫在叫)四、实验步骤1、在 Java 项目中创建一个名为`Animal` 的类:```javapublic class Animal {private String name;private int age;public Animal(String name, int age) {thisname = name;thisage = age;}public void eat(){Systemoutprintln(name +" is eating");}public void sleep(){Systemoutprintln(name +" is sleeping");}}```2、创建一个名为`Dog` 的类继承自`Animal`:```javapublic class Dog extends Animal {private String breed;public Dog(String name, int age, String breed) {super(name, age);thisbreed = breed;}@Overridepublic void eat(){Systemoutprintln(supergetName()+" the "+ breed +" dog is eating greedily");}public void bark(){}}```3、创建一个名为`Cat` 的类继承自`Animal`:```javapublic class Cat extends Animal {private String color;public Cat(String name, int age, String color) {super(name, age);thiscolor = color;}@Overridepublic void sleep(){Systemoutprintln(supergetName()+" the "+ color +" cat is sleeping curled up");}public void meow(){}}```4、在`Main` 类中进行测试:```javapublic class Main {public static void main(String args) {Dog dog = new Dog("Buddy", 3, "Labrador");dogeat();dogbark();dogsleep();Cat cat = new Cat("Mimi", 2, "White");cateat();catsleep();catmeow();}}```五、实验结果1、运行`Main` 类后,输出结果如下:`Buddy the Labrador dog is eating greedily``Buddy is barking``Buddy is sleeping``Mimi is eating``Mimi the White cat is sleeping curled up``Mimi is meowing`2、可以看到,子类`Dog` 重写了父类`Animal` 的`eat()`方法,展示了狗特有的吃东西方式;子类`Cat` 重写了父类的`sleep()`方法,展示了猫特有的睡觉姿势。
Java实验报告继承、多态、接⼝和异常处理实验5 继承、多态、接⼝和异常处理⼀、实验⽬的1、掌握Java的类和对象的声明和使⽤⽅法;2、掌握Java的类的继承和实现⽅法;3、掌握多态性在类的继承中的运⽤;4、掌握接⼝的定义与使⽤;5、掌握基本异常的处理机制;6、熟悉try语句与catch语句的搭配使⽤;7、了解有异常处理与没有异常处理的差别;8、多重catch语句的使⽤;9、使⽤Throws声明异常和Throw抛出异常。
⼆、实验环境1、PC微机;2、DOS操作系统或 Windows 操作系统;3、Java sdk程序开发环境、eclipse集成环境。
三、实验内容1. 设计三个类,分别是学⽣类Student,本科⽣类UnderGraduate,研究⽣类Postjgraduate,其中Student类是⼀个抽象类,它包含学⽣的基本信息如姓名、所学课程、课程成绩等,⽽Undergraduate类和Postgraduate类都是Student类的⼦类,这两个类计算课程成绩等级的⽅法有所不同,如下表所⽰。
假设某班级⾥既有研究⽣⼜有本科⽣,编写程序统计出全班学⽣2. 和Mobilephone具体实现,并设计⼀个应⽤程序类来使⽤这些类。
3.要求设计⼀个GUI图形窗⼝程序,该程序让⽤户输⼊⼀个星期中的任意⼀天的数字1-7,然后输出该数字所对应的是星期⼏。
四、实验步骤实验内容⼀1.建⽴package experiment5_1,其最终⽬录结构如下:2.建⽴Student类:package experiment5_1;public abstract class Student {final static int CourseNo = 3;String name;String type;int[] courses;String courseGrade;public Student(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name; courses = new int[CourseNo];courseGrade = "" ;}public abstract void calculateGrade();public String getName( ) {return name;}public String getType( ) {return type ;}public String getCourseGrade( ) {return courseGrade;}public int getCourseScore(int courseNumber) {return courses[courseNumber];}public void setName(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name;}public void setType(String type) {this.type = type;}public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩this.courses[courseNumber] = courseScore ;}}3.建⽴外部类(1)研究⽣类Postjgraduatepackage experiment5_1;public class postgraduate extends Student {public postgraduate(String name) {super(name);type = "研究⽣";}public void calculateGrade() {// TODO Auto-generated method stubint total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += courses[i];};average = total / CourseNo;if (average>=90&&average<100) courseGrade = "优秀"; else if (average>=80&&average<90) courseGrade = "良好"; else if (average>=70&&average<80) courseGrade = "⼀般"; else if (average>=60&&average<70) courseGrade = "及格"; else courseGrade = "不及格";}}(2)本科⽣类UnderGraduatepackage experiment5_1;public class undergraduate extends Student {public undergraduate(String name ) {super(name);type = "本科⽣";}public void calculateGrade() {int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += getCourseScore(i) ;};average = total / CourseNo;if (average>=80&&average<100) courseGrade = "优秀"; else if (average>=70&&average<80) courseGrade = "良好"; else if (average>=60&&average<70) courseGrade = "⼀般"; else if (average>=50&&average<60) courseGrade = "及格"; else courseGrade = "不及格";}}4.编写代码测试函数package experiment5_1;public class polymorphism {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new undergraduate("陈建平");students[1] = new undergraduate("鲁向东");students[2] = new postgraduate("匡晓华");students[3] = new undergraduate("周丽娜");students[4] = new postgraduate("梁欣欣");for (int i=0; i<5 ;i++) {students[i].setCourseScore(0,87);students[i].setCourseScore(1,90);students[i].setCourseScore(2,78);}for (int i=0; i<5 ;i++) {students[i].calculateGrade();}System.out.println("姓名" + " 类型" +" 成绩");System.out.println("-----------------------");for (int i=0; i<5 ;i++) {System.out.println(students[i].getName( )+" "+students[i].getType( )+" "+students[i].getCourseGrade( ));}}}实验内容⼆1.建⽴package experiment5_2,其最终⽬录结构如下:2.写接⼝Soundable代码:package experiment5_2;public interface Soundable {public void increaseV olume( );public void decreaseV olume( );public void stopSound( );public void playSound( );}3.创建三个类Radio、Walkman和Mobilephone具体实现,分别添加代码:// Mobilephone类package experiment5_2;class Mobilephone implements Soundable{public void increaseV olume( ) {System.out.println("增⼤⼿机⾳量");}public void decreaseV olume( ) {System.out.println("减⼩⼿机⾳量");}public void stopSound( ) {System.out.println("关闭⼿机");}public void playSound( ) {System.out.println("⼿机发出来电铃声");}}// Walkman类package experiment5_2;class Walkman implements Soundable { public void increaseV olume( ) { System.out.println("增⼤随声听⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩随声听⾳量"); }public void stopSound( ) {System.out.println("关闭随声听");}public void playSound( ) {System.out.println("随声听发出⾳乐"); }}// Radio类package experiment5_2;class Radio implements Soundable{ public void increaseV olume( ) { System.out.println("增⼤收⾳机⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩收⾳机⾳量"); }public void stopSound( ) {System.out.println("关闭收⾳机");}public void playSound( ) {System.out.println("收⾳机播放⼴播"); }}4.创建people类及编写测试代码://People类package experiment5_2;class People {public void listen(Soundable s) {s.playSound( );}}//测试代码package experiment5_2;import java.util.Scanner;public class InterfaceTest {public static void main(String[] args) {int i;People sportsman = new People( );Scanner scanner = new Scanner(System.in);Soundable[] soundDevice = new Soundable[3];//往声⾳设备数组中放⼊能发声的设备soundDevice[0] = new Radio( );soundDevice[1] = new Walkman( );soundDevice[2] = new Mobilephone();System.out.println("你想听什么? 请输⼊选择:0-收⾳机1-随声听2-⼿机");i = scanner.nextInt( );//开始听声⾳sportsman.listen(soundDevice[i]);soundDevice[i].increaseV olume( );soundDevice[i].stopSound();scanner.close();}}实验内容三1.建⽴package experiment5_3,其最终⽬录结构如下package experiment5_3;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DateTransf extends JFrame implements KeyListener{/****/private static final long serialVersionUID = 1L;private static DateTransf frm;private static JTextField txt;private static JTextField data;DateTransf() {setTitle("数字与星期转换");setLocation(700, 300);setSize(400,130);}public static void main(String[] args) {frm = new DateTransf();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(2,2));txt = new JTextField(12);data = new JTextField(12);JLabel lable1 = new JLabel("输⼊数字:");JLabel lable2 = new JLabel("星期⼏:");frm.add(lable1);txt.addKeyListener(frm);frm.add(txt);frm.add(lable2);frm.add(data);frm.setVisible(true);}public void keyPressed(KeyEvent e) {if (e.getSource() == txt) {if (e.getKeyCode() == KeyEvent.VK_ENTER) // 判断按下的键是否是回车键{try {int number = Integer.parseInt(txt.getText());switch (number) {case 1:data.setText("Mon");break;case 2:data.setText("Tue");break;case 3:data.setText("Wen");break;case 4:data.setText("Thu");break;case 5:data.setText("Fri");break;case 6:data.setText("Sat");break;case 7:data.setText("Sun");break;default:JOptionPane.showMessageDialog(null, "您输⼊的数字不是1~7","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMATION_MESSAGE); break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输⼊的不是整数","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMA TION_MESSAGE); }}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运⾏五、实验结果●实验内容⼀结果:●实验内容⼆结果:●实验内容三结果:六、实验⼩结1.这次实验的内容⽐较多,需要掌握Java的类和对象的声明和使⽤⽅法、Java的类的继承和实现⽅法、多态性在类的继承中的运⽤、接⼝的定义与使⽤、基本异常的处理机制、try语句与catch语句的搭配使⽤等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。
南京理工大学泰州科技学院实验报告书课程名称:《Java 面向对象程序设计》实验题目:实验四继承与接口班级:09计算机(2)学号:0909030218姓名:尤源指导教师:李丛一、实验目的1.掌握Java语言的类的继承的概念。
2.掌握Java语言中抽象类的使用。
3.掌握Java语言中接口的使用4.掌握eclipse集成开发环境的使用。
二、实验内容1.类的继承,具体要求如下:(1)定义一Person类,该类具有属性人名、年龄、身份证号等信息以及将属性信息作为字符串返回的一方法;(2)定义一Student类,让该类继承Person类,该类除了具有属性人名、年龄、身份证号等信息以外还有学号,所在学校等信息;该类也具有将属性信息作为字符串返回的一方法;(3)编写测试类,测试这两个类2.定义一个动物抽象类Animal,该类有一个抽象的方法cry();定义一个小猫类Cat,该类继承了Animal类并实现了cry()方法,当调用cry()方法时打印“小猫喵喵叫”,定义一个小狗类Dog,该类也继承了Animal类并实现了cry()方法,当调用cry()方法时打印“小狗汪汪叫”。
3. 接口的运用。
定义一接口接口名叫Usb,该接口声明了两个方法分别为start()和stop()方法,定义一U 盘类UsbDiskWriter,一照相机类Camera、一手机类Mobile,让它们都实现该接口。
三、实验步骤实验(1)编写代码实验(2)编写代码实验(3)编写代码四、实验结果实验(1)运行结果实验(2)运行结果实验(3)运行结果五、结果分析1. 子类若想调用父类的构造函数必须要用super关键字。
2.接口体中只能运用抽象类。
3.在同一个java文件中只能在入口函数的类中用public。
第1篇一、实验目的1. 理解接口的概念和作用。
2. 掌握接口的基本用法,包括接口的定义、实现和实现类。
3. 通过实际操作,加深对接口的理解和应用。
二、实验环境1. 操作系统:Windows 102. 开发工具:IntelliJ IDEA3. 编程语言:Java三、实验内容1. 接口的基本概念2. 接口的定义与实现3. 接口的多态性4. 接口的应用示例四、实验步骤1. 接口的基本概念(1)打开IntelliJ IDEA,创建一个新的Java项目。
(2)在项目下创建一个包,命名为“com.example”,用于存放实验代码。
(3)在包下创建一个接口,命名为“IAnimal”,用于定义动物的基本行为。
```package com.example;public interface IAnimal {void eat();void sleep();}```2. 接口的定义与实现(1)在“com.example”包下创建一个类,命名为“Dog”,实现“IAnimal”接口。
```package com.example;public class Dog implements IAnimal {@Overridepublic void eat() {System.out.println("狗吃肉");}@Overridepublic void sleep() {System.out.println("狗睡觉");}}```(2)在“com.example”包下创建另一个类,命名为“Cat”,实现“IAnimal”接口。
```package com.example;public class Cat implements IAnimal {@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void sleep() {System.out.println("猫睡觉");}}```3. 接口的多态性(1)在主类“Main”中创建一个方法,用于测试接口的多态性。
类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。
多态的基础是继承(包括了接口的实现)和方法的覆盖。
什么是多态多态对应的英文单词是polymorphism,百度翻译给出的翻译是:n.多型现象,多态性; 多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。
那是什么东西呢?在面向对象的编程语言里面(当然就包括Java了)就是某个方法或函数。
那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。
而方法的相同与否是由方法签名决定的。
所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。
状态、形态、姿态指的就是行为特征。
多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。
所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。
而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。
所以,这两个类肯定是有某种联系的。
我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的?答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。
比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。
例子不是很恰当,但意思就是这么个意思。
所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。
JA V A继承、抽象类、接口编辑人:星辰·樱联系QQ:838826112一.类的继承通过继承可以实现代码的复用,被继承的类称为父类或超类(superclass),由继承而得到的类称为子类(subclass)。
一个父类可以拥有多个子类,但一个类只能有一个直接父类,这是因为JA V A语言中不支多重继承。
子类继承父类的成员变量和成员方法,同时可以修改父类的成员变量或重写父类的方法,还可以添加新的成员变量或成员方法。
JA V A语言中有一个名为ng.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。
1.子类的创建类的继承是通过extends关键字来实现的,在定义类时若使用ectends关键字指出新定义类的父类,就是在两个类之间建立了继承关系。
新定义的类称为子类,它可以从父类那里继承所有非private的成员作为自己的成员。
子类的创建:* 格式:class SubClass extends SuperClass* {* .* .* .* }2.调用父类中特定的构造方法在没有明确地指定构造方法时,子类还是会先调用父类中没有参数的构造方法,以便进行初始化的操作。
在子类的构造方法中可以通过super()来调用父类特定的构造方法。
例://以Person作为父类,创建学生子类Student,并在子类中调用父类里某指定的构造方法。
class Person2{private String name;private int age;public Person2()//定义Person2类的无参构造方法{System.out.println("调用了Person2类的无参构造方法");}public Person2(String name,int age)//定义Person2类的有参构造方法{System.out.println("调用了Person2类的有参构造方法");=name;this.age=age;}public void show(){System.out.println("姓名:"+name+" 年龄:"+age);}}class Student2extends Person2//定义继承自Person2类的子类Student2{private String department;public Student2()//定义Student2类的无参构造方法{System.out.println("调用了学生类的无参构造方法Student2()");}public Student2(String name,int age,String dep)//定义Student2类的有参构造方法{super(name,age);//调用父类的胡参构造方法department=dep;System.out.println("我是"+department+"学生");System.out.println("调用了学生类的有参构造方法Student2(String name,int age,String dep)");}}public class App8_2 {public static void main(String[] args){Student2 stu1=new Student2();//创建对象,并调用无参构造方法Student2 stu2=new Student2("李小四",23,"信息系");//创建对象并调用有参构造方法stu1.show();stu2.show();}}/*在子类中访问你类的构造方法,其格式为super(参数列表)。
java类的继承实验报告Java类的继承实验报告引言:在面向对象的编程语言中,继承是一种重要的概念。
Java作为一种面向对象的编程语言,也提供了类的继承机制。
本实验旨在通过编写Java程序,深入理解和掌握Java类的继承。
实验目的:1. 理解继承的概念和原理;2. 掌握Java中类的继承的语法和用法;3. 实践继承的实际应用。
实验过程:1. 创建父类和子类在实验中,我们首先创建一个父类和一个子类。
父类可以是一个基本的类,子类则继承了父类的属性和方法。
这样,子类就可以在不改变父类的基础上,扩展自己的功能。
2. 继承的语法和用法Java中,使用关键字"extends"来实现类的继承。
子类通过继承父类,可以获得父类的属性和方法,并且可以在子类中添加新的属性和方法。
在实验中,我们可以通过创建子类对象,并调用继承自父类的方法来验证继承的正确性。
3. 方法的重写在继承中,子类可以重写父类的方法。
这样,当子类调用该方法时,实际上执行的是子类重写后的方法。
通过方法的重写,我们可以实现多态性的效果。
4. 实际应用在实验中,我们可以选择一个具体的应用场景,例如动物类的继承。
我们可以创建一个父类Animal,包含基本的属性和方法,然后创建子类Dog和Cat,分别继承Animal类,并添加自己的特有属性和方法。
通过这个实例,我们可以更好地理解继承的实际应用。
实验结果:通过实验,我们成功地创建了父类和子类,并验证了继承的正确性。
我们还成功地重写了父类的方法,实现了多态性的效果。
最后,我们还通过实际应用的例子,更好地理解了继承的实际应用。
实验总结:通过本次实验,我们深入理解和掌握了Java类的继承。
继承是面向对象编程中的重要概念,通过继承,我们可以实现代码的重用和扩展。
在实际应用中,继承也可以帮助我们更好地组织代码,提高代码的可读性和可维护性。
然而,继承也有一些限制和注意事项。
首先,Java中只支持单继承,即一个子类只能继承一个父类。
浙江大学城市学院实验报告课程名称:面向对象程序设计实验项目名称:类继承与接口(三)学生姓名:专业:软件工程学号:实验地点:实验日期:年月日【实验目的】1.巩固Java类继承的相关知识2.理解对象上转型技术的优点和用途。
3.掌握接口的特点4.接口与抽象类的异同之处【实验内容】一、类继承相关知识强化1. 执行以下程序,给出执行Bbb的结果,并说明指出类Bbb的this.i与super.i的含义(即它们都对应哪个变量)。
class Aaa{int i;Aaa(int a){ i = a;}}class Bbb extends Aaa{int j,k;Bbb(int i){super(i);j = this.i;k = super.i;}public static void main(String[] args){Bbb b = new Bbb(18);System.out.println(b.j +"\t" + b.k);}}执行Bbb的结果:this.i与super.i的含义(即它们都对应哪个类中定义的变量):this.i和super.i 都对应Aaa中的变量2.接着上面例子,将类Bbb改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。
class Bbb extends Aaa{int i= -1,j= -1,k= -1; //比上面例子增加一个实例变量i;Bbb(int i){super(i);j = this.i; //本语句含义是:k = super.i; //本语句含义是:}public static void main(String[] args){Bbb b = new Bbb(18);System.out.println(b.j +"\t" + b.k);}}执行Bbb的结果:这个例子与上面例子的区别:this.i对应Bbb中的isuper.i对应Aaa中的i3.对以下程序,给出执行Bbb的结果,并分析Bbb中main方法中a.show(1), b.show(1),c.show(1)的结果。
实验11类继承与接口(三)一、实验目的和要求1.巩固Java类继承的相关知识2.理解对象上转型技术的优点和用途。
3.掌握接口的特点4.接口与抽象类的异同之处二、实验内容1.类继承相关知识强化2.程序分析思考3.接口与抽象类相关实验三、实验步骤3.1类继承相关知识强化1.执行以下程序,给出执行Bbb的结果,并说明指出类Bbb的this.i与super.i的含义(即它们都对应哪个变量)。
class Aaa{int i;Aaa(int a){i=a;}}class Bbb extends Aaa{int j,k;Bbb(int i){super(i);j=this.i;k=super.i;}public static void main(String[]args){Bbb b=new Bbb(18);System.out.println(b.j+"\t"+b.k);}}执行Bbb的结果:this.i与super.i的含义(即它们都对应哪个类中定义的变量):2.接着上面例子,将类Bbb改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。
class Bbb extends Aaa{int i=-1,j=-1,k=-1;//比上面例子增加一个实例变量i;Bbb(int i){super(i);j=this.i;//本语句含义是:k=super.i;//本语句含义是:}public static void main(String[]args){Bbb b=new Bbb(18);System.out.println(b.j+"\t"+b.k);}}执行Bbb的结果:这个例子与上面例子的区别:3.对以下程序,给出执行Bbb的结果,并分析Bbb中main方法中a.show(1),b.show(1),c.show(1)的结果。
class Aaa{void show(){System.out.println("Aaa中定义的show()");}void show(int i){System.out.println("Aaa中定义的show(int i)");}}class Bbb extends Aaa{void show(){System.out.println("Bbb中定义的show()");}public static void main(String[]args){Aaa a=new Aaa();Bbb b=new Bbb();Aaa c=new Bbb();a.show(1);b.show(1);c.show(1);}}执行Bbb的结果:上面a.show(1)执行了那个类中定义的方法:上面b.show(1);执行了那个类中定义的方法:上面c.show(1)执行了那个类中定义的方法:分析:4.对以下程序,给出执行Bbb的结果,并分析这个例子结果与前面第4个例子,你可以得出什么结论。
class Aaa{int i=10;static void show(){System.out.println("Aaa中定义的show()");}}class Bbb extends Aaa{int i=20;static void show(){System.out.println("Bbb中定义的show()");}public static void main(String[]args){Aaa a=new Aaa();Bbb b=new Bbb();Aaa c=new Bbb();a.show();b.show();c.show();((Bbb)c).show();System.out.println(c.i);//考虑此处System.out.println(((Bbb)c).i);//考虑此处}}执行Bbb的结果:((Bbb)c).show()执行结果:System.out.println(c.i)执行结果:System.out.println(((Bbb)c).i)执行结果:分析与结论:3.2.程序分析思考以下是例5.22的部分关键代码,请分析思考以下问题:(1)Student类中设计抽象方法cost会带来什么好处?(2)Student类的compareCost方法可以用于比较哪些类型的对象?如果没有设计抽象方法cost,那么会发生什么问题?注意:分析重点是软件设计的通用性考虑。
abstract class Student{//定义学生对象的抽象超类private String name;public Student(String name){=name;}public abstract double cost();//声明抽象方法,表示学习费用public double compareCost(Student otherStudent){//当前对象与参数对象的费用比较return this.cost()-otherStudent.cost();//返回大于、等于、小于零的数字}public String getName(){return ;}public void setName(String name){=name;}}class StudentCostTool{static double sumCost(Student[]students){//计算students所有学生的费用之和double sum=0;for(int i=0;i<students.length;i++)sum=sum+students[i].cost();return sum;}static double averageCost(Student[]students){//计算students学生的平均费用return sumCost(students)/students.length;}static double maxCost(Student[]students){//计算students所有学生的费用最大值if(students.length==1)return students[0].cost();int index=0;for(int i=0;i<students.length;i++)if(students[index].compareCost(students[i])<0)index=i;return students[index].cost();}}3.3接口与抽象类实验1.编译下面的程序,指出错误.interface A{//语句1void show();void show(int i){System.out.println("A show()");}}(1)是否出错?出错原因?(2)如果将上面语句1的interface改为abstract class,编译是否出错?(提示:注意abstract修饰符)(3)根据上面的(1)和(2),可以看出接口与抽象类的什么区别?2.编译下面的程序,指出错误.interface IA{void show();void show(int i);}class A implements IA{//语句1public void show(int i){//语句2System.out.println("A show()");}}(1)上面的程序编译是否出错?出错原因?(2)如果将语句1中的class改为abstract class,编译是否出错?为何?(3)如果将语句2中的public删除,编译是否出错?为何?3.编译下面的程序,回答问题abstract class A{public void show(){System.out.println("A show()");}}class AbstractClassTest{public static void main(String[]args){A a=new A();}}(1)编译是否出错?(2)类A的定义编译是否出错?说明什么?(考虑抽象类中是否可以没有抽象方法)4.编译下面的程序,回答问题abstract class A{static abstract void show();}class B extends A{public static void main(String[]args){show();}}(1)上面的程序编译是否出错?(2)如何改正?5.编译下面的程序,回答问题interface IA{int i;void show();}(1)上面的程序编译是否出错?(2)如果出错,错在何处?6.编译下面的程序,回答问题.interface IA{int i=100;void show();//代码1}interface IB{int j=100;void show(int a);//代码2}class A implements IA,IB{public void show(){}//代码3public void show(int a){}//代码4}(1)上面的程序编译是否出错?(2)代码1和代码3的区别是什么?同样,代码2与代码4的区别是什么?7.编译下面的程序,回答问题.abstract class A{void show1(){}}abstract class B{void show2(){}}class C extends A,B{void show3(){}}(1)上面的程序编译是否出错?(2)如果出错,错在何处?(2)如果出错,错在何处?8.编译下面的程序,回答问题.final class A{void show(){}}class B extends A{void show2(){}}(1)上面的程序编译是否出错?(2)如果出错,错在何处?9.编译下面的程序,回答问题.class A{final void show(){}}class B extends A{void show(){System.out.println("aaa");}}(1)上面的程序编译是否出错?(2)如果出错,错在何处?10.编译下面的程序,回答问题.interface IA{}//没有定义任何成员class B{}//没有定义任何成员(1)上面的程序编译是否出错?(2)如果没有出错,你可以得出什么结论?11.编译并运行下面程序,分析运行结果interface IStudent{void showDetail();}class Student implements IStudent{String name;int age;Student(){}Student(String name,int age){=name;this.age=age;}public void showDetail(){System.out.println(name+"\t"+age);}}class GraduateStudent implements IStudent{String name;int age;String major;GraduateStudent(){}GraduateStudent(String name,int age,String major){=name;this.age=age;this.major=major;}public void showDetail(){System.out.println(name+"\t"+age+"\t"+major);}}class InterfaceTest2{static void showStudent(IStudent iStud){//代码1iStud.showDetail();}public static void main(String[]args){Student a=new Student("张三",10);GraduateStudent b=new GraduateStudent("李斯",10,"cs");showStudent(a);showStudent(b);}}(1)执行类InterfaceTest2,输出结果是什么?(推荐阅读:广州孕产网www.ppsetup.com)(2)请注意上面的代码1,这是否说明如果某个类实现了某个接口所申明的方法,那么可以通过该接口类型变量(而不是类引用变量)来调用所实现的方法?实验报告要求将编程题源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。