实验报告
课程名称: Java程序设计成绩评定:
实验项目名称:实验5:类构造函数与继承指导教师:
学生姓名:学号:专业班级:
实验项目类型:基础实验地点:验时间:
一、实验目的与要求:
1、理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性,进一步掌握方法调用时参数的传递;
2、掌握package、jar打包功能与应用;
4、掌握类的继承,理解继承中的覆盖现象.
二、实验内容:
1、按照要求完成程序
public class Test{
public static void main(String args[]){
System.out.println("创建父类对象:");
SuperClass sc0 = new SuperClass();
System.out.println("\n创建第一个子类对象:");
SubClass sc1 = new SubClass();
System.out.println("\n创建第二个子类对象:");
SubClass sc2 = new SubClass(1);
}
}
class SuperClass{
SuperClass( ){
System.out.println("父类的构造函数");
}
}
class SubClass extends SuperClass{
SubClass( ){
System.out.println("子类的第一个构造函数");
}
SubClass(int i){
System.out.println("子类的第二个构造函数");
}
}
要求:1)运行程序写出结果;
创建父类对象:
父类的构造函数
创建第一个子类对象:
父类的构造函数
子类的第一个构造函数
创建第二个子类对象:
父类的构造函数
子类的第二个构造函数
2)去掉SubClass的所有构造函数,然后将Test类中main方法的最后两行语句删除。预测修改后程序的运行结果,并进行验证。
创建父类对象:
父类的构造函数
创建第一个子类对象:
父类的构造函数
2、首先预测下列程序的运行结果,然后编译、执行以验证你的预测:
class Pet{
protected String name;
public Pet(String n){
name = n;}
public String getName(){
return name;}
public String move(){
return "run";}
public String speak(){
return "";}
public String toString(){
return "My pet " + name;}}
class Dog extends Pet{
protected int weight;
public Dog(String s){
super(s);}}
public class PetTest{
public static void main(String[] args){
Pet myPet = new Pet("George");
Dog myDog = new Dog("Spot");
System.out.println(myPet.toString() + "\n" + "Speak: " +
myPet.speak() +"\n" + myPet.move() + " " +
myPet.getName() + "\n");
System.out.println(myDog.toString() + "\n" + "Speak: " +
myDog.speak() +"\n" + myDog.move() + " "
+myDog.getName() + "\n");}}
输出:
My pet George
Speak:
run George
My pet Spot
Speak:
run Spot
1)修改Dog类的构造函数,使之可以初始化Dog类中的weight值。
class Dog extends Pet{
protected int weight;
public Dog(String s,int weight){
super(s);
this.weight=weight;
}
Dog myDog = new Dog("Spot",20);
输出:
My pet George
Speak:
run George
My pet Spot
Speak:
run Spot
2)在Dog类中添加方法getWeight以获
得其weight值。
public int getWeight(){
return this.weight;
}
输出:
My pet George
Speak:
run George
My pet Spot
Speak:
run Spot
3)修改类PetTest,使用新的构造函数创建一个名为“snoopy”,重为10 的Dog类的对象,并利用其方法输出包括重量在内的各项值。
代码:Dog snoopy = new Dog("Snoopy",10);
System.out.println(snoopy.toString() + "\n" + "Speak: " + snoopy.speak() +"\n" + snoopy.move() + " " +snoopy.getName() + "\n"+"它的重量是:
"+snoopy.getWeight()+"\n");
4)要使Dog类对象的speak()方法返回值为“Woof Woof”,应如何做?修
改(1)中程序,并验证你的做法。
代码:public Dog(String s,int weight,String speak){
super(s);
this.weight=weight;
this.speak=speak;}
3、按照要求完成程序:
1)第一个类是图形类(Shape),含有一个成员变量color(字符串类型),一
个没有参数的构造方法,以及一个有一个字符串类型参数的构造方法来
初始化颜色变量,还有一个返回颜色变量值的成员方法show,以及一个
抽象方法getArea获取面积,返回值为double类型;
2)第二个类是圆形类(Circle)继承自图形类,含有一个成员变量半径r,有
一个有两个参数的构造方法,来初始化颜色和半径,一个方法getArea,
返回值为double,获取圆的面积值。
3)第三个类是矩形类(Rectangle)继承自图形,含有两个double类型的成员
变量长a和宽b,有一个有三个参数的构造方法,来初始化颜色、长和宽,一个方法getArea,返回值为double,获取矩形的面积值。
4)第四个类是测试类(TestShape),分别定义圆形类和矩形类的实例对象,
并用show方法,getArea方法来测试自己的定义
abstract class Shape{
String color;
public Shape (){
}
public Shape(String color){
super();
this.color=color;}
public String showColor(){
return color;
}
public abstract double getArea();
}
class Circle extends Shape{
private int r;
public Circle(String color,int r){
super();
this.color=color;
this.r=r;}
public double getArea(){
return 3.14*r*r;}
}
class Rectangle extends Shape{
private double a;
private double b;
public Rectangle( String color ,double a,double b){
super();
this.color=color;
this.a=a;
this.b=b;}
public double getArea(){
return a*b;}
}
public class TestShape{
public static void mian(String[] args){
Circle t1=new Circle("红",5);
Rectangle t2=new Rectangle("蓝",8,4);
System.out.println("该圆的颜色为:"+t1.showColor()+", "+"面积为:"+t1.getArea());
System.out.println("该矩形面积为:"+t2.getArea());}
}
4、Java包的实践
修改第3题的Java程序,利用package关键字、jar命令将上述四个类打包为一个为名为Shapes4.jar包文件。
在源程序前加package shapes4;
三、实验体会:
1、对抽象方法和抽象类的定义和使用还不是很清楚,不知道如何重写抽象方法的。
2、定义为public或者不定义的影响不知道,为什么类定义为public类时编译会出错,不定义时不会出现同样的错误。类中的对象的定义为public或者private的区别,以及对后续函数的影响不是很清楚。
3、编写时会出现一些细节性的错误,不过经过调试基本可以解决,如:输出语句没写对,少打了一个大括号等。
4、最后一个Shape、TestShape等类的编写题目执行时出错,不知道怎么解决。
5、打包类,之前按照书上写语句总是不对,后来老师讲过之后知道了是路径的问题。
6、要多自己上机做实验。
《面向对象程序设计》实验报告 实验六、类的继承 课程代码:1H10500学分:6 实验类型:实践型实验学时:4个学时 实验时间:2017.11.23 实验地点:5407 班级:计算机164 专业:计算机科学与技术专业学号:2016011147 姓名:林文辉 一、实验目的 (1)学习JAVA继承的思想 (2)了解JAVA语言继承的实现 二、实验内容及步骤 内容:在圆柱体类Cylinder里,用一个构造方法调用另一个构造方法 步骤:方案的设计与分析(类结构图。。。。。。) (1)找出对象的共同属性和行为 (2)设计代表共同状态与行为的类 (3)决定子类是否需要让某项行为有特定的不同的运行方式 (4)寻找更多抽象化的机会 (5)完成类的继承层次 三、实验过程及结果 实验1代码: abstract class Graphics { abstract void parameter(); abstract void area(); } class Rectangle extends Graphics{ double h,w; Rectangle(double u,double v){h=u;w=v;} void parameter() { S ystem.out.println("矩形高度为:"+h+",矩形宽度为:"+w); } void area() { S ystem.out.println("矩形面积为:"+(h*w)); } }
class Circle extends Graphics{ double r; String c; Circle(double u,String v){r=u;c=v;} void parameter() { System.out.println("圆半径为:"+r+",圆颜色为:"+c); } void area() { System.out.println("圆面积为:"+(Math.PI*r*r)); } } class ExamAbs{ public static void main(String args[]) { Rectangle rec=new Rectangle(2.0, 3.0); Circle cir=new Circle(4.0, "Red"); Graphics[]g= {rec,cir}; for(int i=0;i 实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1) (2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。 2. #include 实验2 派生类与继承 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 2.1实验目的和要求 (1) 掌握派生类的声明方法和派生类构造函数的定义方法。 (2) 掌握不同继承方式下,基类成员在派生类中的访问属性。 (3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。 (4) 学习虚基类在解决二义性问题中的作用。 二、实验内容 一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。 试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。 实验代码如下: #include ~Geometry(){} double GetArea(){}//求面积函数double GetPerimeter(){}//求体积函数double Getcolume(){}//求周长函数 virtual show(){} }; class Circle:public Geometry { public: Circle(double i) { radiums=i; } ~Circle(){} double GetArea(); double Getcolume(); double R() { return radiums; } show(); private: 实验七对象集合的组织 实验目标: 1.了解Collection、List、Set、Map等常用数据结构的层次结构 2.掌握LinkList、Vector、ArrayList、HashTable、HashMap等类的用法 3.掌握Enumeration(枚举)及Iterator(迭代器)的遍历用法 4.了解自学HashSet、TreeSet这两个Set接口下的重要实现类 5.了解自学比较器接口 实验任务: 1. 填空 List 接口的特点是元素__有__(有|无)顺序,___可以___(可以|不可以)重复; Set 接口的特点是元素__无___(有|无)顺序,__不可以____(可以|不可以)重复; Map 接口的特点是元素是键、值对象,其中__键__可以重复,_值对象__不可以重复 2. (List)有如下代码: import java.util.*; public class TestList{ public static void main(String args[]){ List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(1, “Learn”); list.add(1, “Java”); printList(list); } public static void printList(List list){ //1 } } 要求: 1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容,请使用三种方式来实现(课本227页,Iterator、增强for循环,普通循环)。 2) 三种代码与执行结果截图 1、用Iterator实现的代码如下: package zi; import java.util.*; publicclass Ex7_2{ publicstaticvoid main(String args[]){ List list = new ArrayList(); list.add("Hello"); list.add("World"); list.add(1, "Learn");继承和派生实验报告
c++派生类与继承实验报告材料
java 实验七 对象集合 实验报告
实验6-继承与派生(1)