类和对象1
第四讲 类和对象(1)

第4章 类和对象
***温故***
Java程序 数据类型 运算符和表达式 语句
本讲要点ห้องสมุดไป่ตู้
面向对象编程的基本概念 类的定义
类首部 类体
成员变量 成员方法
对象的创建与使用
创建对象 使用对象
构造方法
面向对象编程的基本概念
类和对象 类是定义对象的模板,用来描述一 类事物的共有属性和功能。 对象是一个具体的事物。 例: 汽车类—某辆汽车 学生类—某个学生 窗口类—某个具体的窗口 汽车(类) 品牌 型号 颜色 ---------加速与减速设计 转向设计 刹车设计 ……
使用对象—例5 梯形
public static void main(String[]args) { float area; Ladder ladder=new Ladder(); ladder.a=10.0f; ladder.b=20.0f; ladder.setH(5f); area=ladder.calculatArea(); System.out.println("area="+area); }
class Triangle{ float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC){ this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; } }
哺乳动物:胎生,能用母乳喂养幼仔。 猫:胎生,能用母乳喂养幼仔。会捉老鼠。
实验三 类与对象(1)——耿祥义

定义Test3_2类,在其中编写一个main方法,在其中创建分别创建三个类的对象,并显示Circle,Lader,Trangle对象的属性信息和面积值。对Trangle对象,还要显示其是否可以构成三角形的信息。
(二)使用修饰符
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下。public,private,protected,package,static,final,transient,volatile
程序功能:通过两个类StaticDemo、KY2_4说明静态变量/方法与实例变量/方法的区别。
③将class CCircle中的变量double pi; double radius;加上private修饰符,进行编译会出现什么问题,为什么?
④将void setCircle(double r, double p),double getRadius()和double getCircleArea()加上修饰符static,重新编译会出现什么问题?仍用static,怎样修改别的地方来纠正这个错误?在main中引用这些方法时不用创建对象则怎样引用?
程序功能:描述一个圆类,其主要属性为半径,还有一个非常重要的常量是圆周率。该圆可以求出面积,可以设置半径和取得半径大小。
class CCircle
{ double pi;
double radius;
double getRadius()
{ return radius;
}
void setCircle(double r, double p)
void aaa()
实验5 类和对象1答案

实验5:Java类与对象一、实验目的(1)使用类来封装对象的属性和功能;(2)掌握Java类的定义。
(3)java对象的使用二、实验任务(1)按要求编写一个Java程序。
(2)按要求完善一个Java程序,编译、运行这个程序,并写出运行结果。
三、实验内容1.编写一个Java程序片断,以定义一个表示学生的类Student。
这个类的属性有“学号”、“班号”、“姓名”、“性别”、“年龄”,方法有“获得学号”、“获得班号”、“获得性别”、“获得姓名”、“获得年龄”、“获得年龄”。
2.为类Student增加一个方法public String toString( ),该方法把Student类的对象的所有属性信息组合成一个字符串以便输出显示。
编写一个Java Application程序,创建Student类的对象,并验证新增加的功能。
class Student{long studentID;int classID;String name;String sex;int age;public Student(long studentID,int classID,String name,String sex,int age){ this.studentID=studentID;this.classID=classID;=name;this.sex=sex;this.age=age;}public long getStudentID(){return studentID;}public int getClassID(){return classID;}public String getName(){return name;}public String getSex(){return sex;}public int getAge(){return age;}public String toString(){return "学号:"+getStudentID()+"\n班号:"+getClassID()+"\n姓名:"+getName()+"\n性别:"+getSex()+"\n年龄:"+getAge();}}public class StudentDemo{public static void main(String[] args){Student s1=new Student(90221,2,"Tom","male",20);System.out.println(s1.toString());}}运行结果:学号:90221班号:2姓名:Tom性别:male年龄:202.程序填空,程序中包含以下内容:一个学生类(Student),包含:属性:学号s_No,姓名s_Name,性别s_Sex,年龄s_Age。
面向对象程序设计(C++)实验一--类和对象

实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。
二、实验内容:1、设计圆类,求两个圆的位置关系;2、设计圆类和直线类,求直线与圆的位置关系;3、设计学生类,求某班学生成绩的最高分、最低分及平均分;4、设计部门类和教师类,其中部门类成员为教师类的子对象;5、设计家庭银行账户类,其中账户资金为静态数据成员,为家庭成员共享;6、设计复数类,友元函数实现复数的加减。
三、实验过程:1、根据实验题目确定需要设计哪些类、各类中包含哪些数据成员和函数成员,设计各成员的访问权限,设计数据成员的数据类型,设计函数成员的函数原型;2、给出类设计的程序实现,特别要注意重载构造函数的实现;3、在主函数中完成题目中的逻辑,一般情况下需要创建相关类的对象,通过对象对成员函数的调用或者通过对象指针对成员函数的调用完成相应的功能。
四、参考程序代码:1、设计圆类,求两个圆的位置关系#include <iostream>#include <math.h>using namespace std;class Circle{private:float a,b,r;public:Circle(float c,float d,float e){a=c;b=d; r=e;}friend void position(Circle &,Circle &);};void position(Circle &c1,Circle &c2){float n,m,p;p=sqrt((c1.a-c2.a)*(c1.a-c2.a)+(c1.b-c2.b)*(c1.b-c2.b)); n=fabs(c1.r-c2.r);m=c1.r+c2.r;if(p>m)cout << "相离";if(p==m)cout << "相切";if(p<m)cout << "相交";}int main(){float a,b,c,d,e,f;cin >> a >> b >> c >> d >> e >> f ;Circle c1(a,b,c),c2(d,e,f);position(c1,c2);return 0;}运行结果:2、设计圆类和直线类,求直线与圆的位置关系#include<iostream>#include<math.h>using namespace std;class Circle//圆类{private:float x,y,r;public:Circle(float a,float b,float c) {x=a;y=b;r=c;}float getx(){return x;}float gety(){return y;}float getr(){return r;}};class Line//直线类{private:float a,b,c;public:Line(float x,float y,float z){a=x;b=y;c=z;}void position(Circle c1){float d=fabs(a*c1.getx()+b*c1.gety()+c)/sqrt(a*a+b*b) ;//圆心到直线的距离if(d<c1.getr())cout << "相交";if((d-c1.getr())<0.000001)cout << "相切";cout << "相离";}};int main(){Line l1(3,3,4);//创建直线对象Circle c1(-23,3,7);//创建圆对象l1.position(c1);return 0;}运行结果:3、设计学生类,求某班学生成绩的最高分、最低分及平均分#include <iostream>#include <string.h>using namespace std;class Student{private:char name[20],xuehao[20];float math;public:Student(){}Student(char *na,char *xu,float ma):math(ma) {strcpy(name,na);strcpy(xuehao,xu);}void set(char *na,char *xu,float ma){math=ma;strcpy(name,na);strcpy(xuehao,xu);}char *get_name(){return name;}char *get_xuehao(){return xuehao;float get_math(){return math;}};void max_min(Student stu[],int n){Student max,min;max=min=stu[0];for(int i;i<n;i++){if(stu[i].get_math()>max.get_math())max=stu[i];if(stu[i].get_math()<min.get_math())min=stu[i];}cout << "学生成绩最高:" << max.get_name() << "," << max.get_xuehao() << "," << max.get_math() << endl;cout << "学生成绩最低:" << min.get_name() << "," << min.get_xuehao() << "," << min.get_math() << endl;}void ave(Student stu[],int n){float sum=0;for(int i=0;i<n;i++){sum=sum+stu[i].get_math();cout << "ave=" << sum/n;}int main(){char na[20],xu[20];float ma;Student stu[20];int n;cout << "请输入学生总人数"; cin >> n;for(int i=0;i<n;i++){cin >> na >> xu >> ma ; stu[i].set(na,xu,ma); }max_min(stu,n);ave(stu,n);return 0;}运行结果:4、设计部门类和教师类,其中部门类成员为教师类的子对象#include <iostream>#include <string.h>using namespace std;class Department{private:int dep_num;char dep_master[20];char dep_name[20];public:Department(){}Department(int num,char *ma,char *na){dep_num=num;strcpy(dep_master,ma);strcpy(dep_name,na);}void show(){cout << dep_num << "," << dep_master << "," << dep_name ; }};class Teacher{private:char name[20];char haoma[20];Department dep;public:Teacher(char *n,char *nu,int num,char *ma,char *na):dep(num,ma,na) {strcpy(name,n);strcpy(haoma,nu);}void show(){dep.show();cout << "," << name << "," << haoma << endl;}};int main(){Teacher hp("wanghai","12345",6,"kiki","computer");hp.show();return 0;}运行结果:5、设计家庭银行账户类,其中账户为静态数据成员,为家庭成员共享#include <iostream>#include <string.h>using namespace std;class Familymember//家庭成员类{private:char membername[10];//成员名public:static float account;//共享账户资金 Familymember(char *name);static void save(float money);//存钱 static void pay(float money);//支出 static void show(); //显示账户余额};float Familymember::account=0;Familymember::Familymember(char *name) {strcpy(membername,name);}void Familymember:: save(float money) {account= account+money;}void Familymember:: pay(float money){account= account-money;}void Familymember:: show(){cout<<account<<endl;}int main()//主函数{ Familymember husband("wang"),wife("Li"); husband.save(10000);wife.pay(3000);wife.save(5000);wife.show();husband. show();}运行结果:6、设计复数类,友元函数实现复数的加减#include <iostream>using namespace std;class Fushu{private:float ss,xs;public:Fushu(){}Fushu(float a,float b){ss=a;xs=b;}friend Fushu jiafa(Fushu &f1,Fushu &f2){return Fushu((f1.ss+f2.ss),(f1.xs+f2.xs)); }friend Fushu jian(Fushu &f1,Fushu &f2){return Fushu((f1.ss-f2.ss),(f1.xs-f2.xs)); }void show(){cout << ss << " + " << xs << "i" << endl; }};int main(){Fushu f1(2,3),f2(4,5);Fushu f3,f4;f3=jiafa(f1,f2);f4=jian(f1,f2);f3.show();f4.show();return 0;}运行结果:。
C++实验1-类和对象

实验一类和对象实验课程名:面向对象程序设计(C++)专业班级:学号:姓名:实验时间:实验地点:指导教师:一、实验目的和要求(1) 理解类和对象的概念,掌握声明类和定义对象的方法。
(2) 掌握构造函数和析构函数的实现方法。
(3) 初步掌握使用类和对象编制C++程序。
(4) 掌握对象数组、对象指针和string类的使用方法。
(5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。
(6) 掌握类对象作为成员的使用方法。
(7) 掌握静态数据成员和静态成员函数的使用方法。
(8) 理解友元的概念和掌握友元的使用方法。
二、实验内容1.输入下列程序//test4-1.cpp#include<iostream>using namespace std;class Coordinate{ public:Coordinate(int x1,int y1){ x=x1;y=y1;}Coordinate(Coordinate &p);~Coordinate(){ cout<<”Destructor is calleded\n”;}int getx(){return x;}int gety(){return y;}private:int x,y;};Coordinate::Coordinate(Coordinate &p){ x=p.x;y=p.y;cout<<”copy-initialization Constructou is called\n”;}int main(){ Coordinate p1(3,4);Coordinate p2(p1);Coordinate p3=p2;cout<<”p3=(“<<p3.getx()<<”,”<<p3.gety()<<”)\n”;}(1) 写出程序的运行结果。
(2) 将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增添下述语句:cout<<”Constructor is called.\n”;写出程序的运行结果,并解释输出结果。
1.什么是类?什么是对象?对象和类是什么关系?

1.什么是类?什么是对象?对象和类是什么关系?答:类是抽取了同类对象的共同属性和行为形成的对象或实体的“模板”。
对象是现实世界中实体的描述,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。
类和对象之间的关系是抽象和具体的关系:类表达的是一种抽象的概念,它描述了该类对象的共同特征;而对象是具体事物,以类为模板来生成,它具有自己的状态。
举例:类与对象的关系犹如零件的图纸与按图纸制造出的零件关系一样;图纸(类)描述了零件(对象)的共同特征,每个零件(对象)又有自己的个性,如加工精度的不同等等2、什么是方法?方法的结构是怎样的?设计方法应考虑哪些因素?答:方法是Java类的一个组成部分,通过类的方法改变对象的状态。
方法的结构:[方法修饰符] 返回值类型方法名([形参列表])[throws异常列表] {方法体;}设计方法应考虑因素有:(1) 方法名是Java中任意的标识符,按照命名的约定,方法名应该是有意义的动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。
(2) 返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。
如果方法没有返回值,则用void表示。
(3) 形式参数列表是可选的。
如果方法没有形式参数,就用一对小括号“()”表示。
形式参数列表的形式如下:(类型形参名,类型形参名,……)(4) throws异常列表规定了在方法执行中可能导致的异常。
3.创建一个有两个方法的类,,第一个使用this,第二个不使用this。
class Rectangle //矩形类{int width; // 矩形的宽int usethis(int width) //返回宽度的函数{this. width= width; //指自己这个对象return width;}int unusethis(int width){ int w=width;return w;}public static void main(String args[]){Rectangle r=new Rectangle(); //类对象的实例化System.out.println("It is about the node of this."); //输出语句System.out.println(ethis(1));System.out.println(r.unusethis(2));运行结果:It is about the node of this.124、创建一个类,该类还有int和char类型的成员变量且未被初始化,然后编程输出这些成员变量的值,查看java是否执行了默认的初始化操作。
第7章-类和对象-1

成员变量
Strpinugblnicacmlaes;s Ini/t/ia姓lV名istor {
int agep;ublic/s/t年at龄ic void main(String[] args) { //显示信息Sc方an法ner input = new Scanner(S成yst员em方.i法n);
public voidVsishiotowr(v){= new Visitor();
center.classNumber = 10;
bNumber = 10;
System.out.println("\n***初始化成员变量后***");
center.
演示示例:创建和使用对象
第22页/共45页
创建和使用对象示例5-2
问题
编写学员类,输出学员相关信息
编写教员类,输出教员相关信息
分析
学员类
姓名 年龄 班级 爱好 显示学员个人信息
教员类
姓名 专业方向 教授课程
教龄 显示教员个人信息
第23页/共45页
创建和使用对象示例5-3
示例
public class SIntuitdiaelnStu{dent { Spturbinligcnstaamtiec;void//m姓a名in(String args[]成){ 员变量
实现积分回馈功能
金卡客户积分大于1000分或普卡客户积分大于 5000,获得回馈积分500分
创建客户对象输出他得到的回馈积分
完成时间:20分钟 共性问题集中讲解
第35页/共45页
按此按钮, 狮子开始跑
按此按钮, 狮子开始叫
类的方法
电动玩具狮子 属性: 颜色:黄色
行为: 跑 叫
第八章 类与对象(一)

5.类成员函数的一个重要性质
类成员函数具有一切与“作为类成员”不相冲突 的普通函数的用法。如可带默认形参值。 void Clock::SetTime(int NewH = 0, int NewM = 0, int NewS = 0) { Hour = NewH; Minute = NewM; Second = NewS; }
通过对象的引用变量来访问对象中的成员
如果为一个对象定义了一个引用变量,它们是共占同一段 存储单元的,实际上它们是同一个对象,只是用不同的名 字表示而已。因此完全可以通过引用变量来访问对象中的 成员。 如果已声明了Time类,并有以下定义语句: Time t1; //定义对象t1 Time &t2=t1; //定义Time类引用变量t2,并使之初始 化为t1 cout<<t2.hour; //输出对象t1中的成员hour 由于t2与t1共占同一段存储单元(即t2是t1的别名),因此 t2.hour就是t1.hour。
4.在类声明体外定义成员函数
在前面已经看到成员函数在类声明体(简称类体)中 定义,而实际上,类成员函数通常在类声明体外定义,在 类体中只写成员函数的声明。 例1: class Clock { public: void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); private: int Hour, Minute, Second; };
例2: class Student { public: void display( ); //公用成员函数原型声明 private: int num; string name; char sex; //以上3行是私有数据成员 }; void Student∷display( ) //在类外定义display类函数 //函数体 { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } Student stud1,stud2; //定义两个类对象
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类和对象习题一、选择题1. 下列不属于面向对象编程的三个特征的是A. 封装B. 指针操作C. 多态性D. 继承2. 类所实现的接口以及修饰不可以是A. publicB. abstractC. finalD. void3. 下列类的定义,错误的是A. public class test extends Object{ …… }B. final class operators{……}C. class Point{……}D. void class Point{……}4. 关键字supper的作用是A. 用来访问父类被隐藏的成员变量B. 用来调用父类中被重载的方法C. 用来调用父类的构造函数D. 以上都是5. 下面程序定义了一个类,关于该类说法正确的是abstractClass{……}A. 该类能调用new abstractClass(),方法实例化为一个对象B. 该类不能被继承C. 该类的方法都不能被重载D. 以上说法都不对6. 关于对象的删除,下列说法正确的是A. 必须由程序员完成对象的清除B. java把没有引用的对象作为垃圾收集起来并释放C. 只有当程序中调用System.gc()方法时才能进行垃圾收集D. java中的对象都很小,一般不进行删除操作。
7. 下列说法正确的是A. java中包的主要作用是实现跨平台功能???????B. package语句只能放在import语句后面C. 包(package)由一组类(class)和界面(interface)组成D. 可以用#include关键词来标明来自其它包中的类;8. 关于构造方法,下列说法错误的是A. 构造方法不可以进行方法重写B. 构造方法用来初始化该类的一个新的对象C. 构造方法具有和类名相同的名称D. 构造方法不返回任何数据类型9. 请将程序补充完整___ abstract _ class C.{. abstract void callme(). void metoo{System.out.println(“类C的metoo()方法”);}}class D____extends___C{void callme(). {System.out.println(“重载C类的callme()方法”);}}public class Abstract{public static void main(String args[])}C c=____new______D();?????c.callme();c.metoo();}}二、填空题1. 把对象实例化可以生成多个对象,使用___new______运算符为对象分配内存空间。
2. java程序引入接口的概念,是为了弥补只允许类的_____多继承___的缺憾。
3. java语言以___类____为程序的基本单位,它是具有某些共同特性实体的集合,是一种抽象的概念。
4. 抽象方法只能存在于抽象类中。
抽象方法用关键字__abstract______来修饰。
5. java语言中___JFrame____是所有类的根.?????6. 在java中有一种叫做__构造函数_____特殊方法,在程序中用它来对类成员进行初始化.7. new是___类___对象的操作符.8. 继承主要强调子类在父类的基础上取”长”补”短”,而__??____主要强调的是类与类之间的传输9. 我们在java程序中,把关键字__super______加到方法名称的前面,来实现子类调用父类的方法10. 定义一个类包括定义类头和定义___类体___两个部分11. 在java程序里,同一类中重载的多个方法具有相同的方法名和_不同____的参数列表.重载的方法可以有不同的返回值类型12. java是面向对象语言,对象是客观事物的_______,对象与之是一一对应的,它是很具体的概念.13. java语言通过接口支持___多重___继承,使类继承具有更灵活的扩展性14. 一个对象的生命周期包含三个阶段:生成, __使用____ 和清除15. java语言中,调用方法时,参数传递是_值_____调用,而不是地址调用16. 接口是一种只含有抽象方法或______的一种特殊抽象类??????17. 创建一个类就是创建一个新的数据类型,而类在java中属于___引用___数据类型。
18. abstract方法___不能_____(不能或能)与final并列修饰同一个类19.如果一个类中定义了几个名为method的方法,这些方法的参数都是整数,则这些方法的____形参____必须是不同的,这种现象称为方法的重载。
三、判断题( )1.抽象类不能实例化( )2.接口名可以作为方法返回值的类型( )3.类A和类B位于同一个包中,则除了私有成员,类A可以访问类B的所有其他成员( )4.内部类都是非静态的( )5.接口中的所有方法都没有被实现( )6.在Java程序中,通过类的定义只能实现单重继承。
四、编程题1.构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。
2.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),和封装name属性的方法:setName(),getName(),编写Application,创建一个学生对象,设置name和age属性值,然后调用一个方法(此方法将对象作为参数传递,在方法中打印出学生的名字name和年龄age)。
3.定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标show(),构造函数有两个参数分别给x,y赋值,在main方法中构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的中点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。
4.求Fibonacci序列的前n项,要求:在main方法中定义一数组,数组的长度n为一final定义的常量;使用一单独方法,无返回值,参数为一数组,在方法中给数组赋予序列的值;在main方法中调用该方法,然后打印结果数组的内容。
5.有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0<a<180),a为静态成员,成员方法有两个:求面积s(无参数)和修改角度(参数为角度)。
构造函数为 Triangle(int xx,int yy,int aa) 参数分别为x,y,a赋值在main方法中构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。
(提示:求高的方法 h=y*Math.sin(a) )6.定义一个复数(z=x+iy)类Complex,包含:1)两个属性:实部x和虚部y2)默认构造函数 Complex(),设置x=0,y=03)构造函数:Complex(int i,int j)4)显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。
5)求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2)6)求两个复数的差的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex subComp(Complex C1,Complex C2)7)求两个复数的乘积的方法:(参数是两个复数类对象,返回值是复数类对象,新复数实部=两复数实部乘积-两复数虚部乘积,新复数虚部=两复数实部与虚部交叉乘积之和,)public Complex multiComp(Complex C1,Complex C2)8)比较两个复数是否相等的方法(参数是两个复数类对象,返回值是boolean类型)public boolean equalComp(Complex C1,Complex C2)9)在Application中测试该类的方法,实部x和虚部y可由main方法参数提供输入。
7.声明一个矩阵类Matrix,成员变量是一个二维数组,设数组元素类型为int,请设计方法:1)构造方法:Matrix() //构造一个10X10个元素的矩阵,没有数据Matrix(int n,int m) //构造一个nXm个元素的矩阵,数据由随机数产生Matrix(int table[][]) //以一个整型的二维数组构造一个矩阵,要求使用 this2)实例方法:public void output() //输出Matrix类中数组的元素值public void transpose() //输出一个矩阵的转置矩阵3)随机数求法:Math.random( )返回0-1的小数由上题中的Matrix类派生出正方形Square类,在构造方法中调用父类的构造方法(使用super)。
8.定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main 方法中构造3个对象,调用showArea方法。
9.定义接口Di agArea,其中包含方法double getDiagonal()求对角线长, double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。