类和对象1详细讲解
- 格式:ppt
- 大小:2.91 MB
- 文档页数:33


Java类和对象详解,以及相关知识点了解类和对象前,简单提及⾯向对象程序设计。
⾯向对象程序设计就是通过对象来进⾏程序设计,对象表⽰⼀个可以明确标识的实体。
例如:⼀个⼈、⼀本书、⼀个学校或⼀台电脑等等。
每个对象都有⾃⼰独特的标识、状态和⾏为。
对象的状态(特征或属性,即实例变量),由该对象的数据域来表⽰。
例如:⼀个⼈可以具有名字、年龄、⾝⾼、体重、家庭地址等等属性,这些就是“⼈这个对象的数据域”。
对象的⾏为(对象执⾏的动作,即功能),由⽅法来定义。
例如:定义getName()来获取姓名, getHeight()获取⾝⾼,setAddress(String addr)修改地址。
类和对象的关系类是⼀种抽象的概念集合,是最基础的组织单位,作为对象的模板、合约或蓝图。
类是对象的类型,使⽤⼀个通⽤类可以定义同⼀类型的对象,类中定义对象的数据域是什么以及⽅法是做什么的。
对象是类的实例,⼀个类可以拥有多个实例,创建实例的过程叫做实例化。
实例也称为对象,两者说法⼀致。
⽤⼏个案例来加深理解类和对象。
上⾯的⼏个类定义了该类对象的数据域和⽅法,但这些类中都没有main()⽅法,所以⽆法运⾏。
注意:拥有main()⽅法的类称为主类,是执⾏程序的⼊⼝。
使⽤类中定义的数据域和⽅法需要创建该类的实例,然后⽤实例来调⽤。
public class TestCreateInstance {public static void main(String[] args) {//创建Fruit类的实例Fruit f = new Fruit("⾹蕉", "甜味");System.out.println(f.toString()); //显⽰f实例中的⽔果信息//创建Book类的实例Book b = new Book("Java案例学习", "IT", 25.5, "A0001");System.out.println(b.toString()); //显⽰b实例中的书籍信息//创建Person类的实例Person p = new Person("张三", 1, 18, "中国北京");System.out.println(p.toString());//result// ⽔果名:⾹蕉, ⼝味:甜味// 书名:Java案例学习, 书的种类:IT, 单价:25.5, 书籍编号:A0001// 名字:张三, 性别:1,年龄:18, 出⽣地:中国北京}}这⾥定义了带有main()⽅法的TestCreateInstance类,⽤于测试其他三个类。
类和对象类的概念类是⼀个模板,是抽象的概念集合,它描述⼀类对象的⾏为和状态种类、类别.....(我们⼈为对相同类似的事务和东西的归类)定义为类,即所有类的⽗类总归为Object (最终类,我们⾃定义的类默认继承Object ),Java 对所有类的概括如动物类,动物下⼜可分哺乳动物和卵⽣动物,⽜、兔、虎、蛇......每⼀个⼜可以单独归为⼀个类,每个动物下还有不懂种类不同类有不同属性(变量)和⾏为(⽅法),属性:长度,重量,年龄等⾏为:吃,跑,叫定义/* 访问修饰符 class(关键字) 类名 { }类名 约定采取驼峰命名法,⾸字母⼤写*/类中有啥属性实例变量:上⾯的变量就为实例变量,他们与对象挂钩,是需要通过对象来调⽤的,或者是本类,⼦类⽅法,代码块中调⽤(⽤于声明对象的结构的, 在创建对象时候分配内存,每个对象有⼀份!也有默认值)局部变量::在栈中分配,作⽤于⽅法或语句中,必须初始化,有值才能运算静态变量 static int count; 在这打⽐可以描述该运⾏中dog 的个数记录⼀声明就被存储在栈中,直接占据内存,可以快速稳定的调⽤全局唯⼀,在⼀个运⾏环境中,静态变量只有⼀个值,任何⼀次修改都是全局性的影响不需要new 出对象引⽤来调⽤,在其他类中可以直接⽤-->类名.变量名调⽤final 常量 fianl String shape; (体型)static final String shape 静态常量⾏为(⽅法)不同类具有不同的⽅法,对该类的⾏为操作,完成⼀个动作,这个类的⼀个功能静态⽅法与⾮静态⽅法静态⽅法与静态成员变量⼀样,属于类本⾝,在类装载的时候被装载到内存,不⾃动进⾏销毁,会⼀直存在于内存中,直到JVM 关闭。
(静态⽅法是共享代码段,静态变量是共享数据段。
既然是“共享”就有并发的问题。
)⾮静态⽅法⼜叫实例化⽅法,属于实例对象,实例化后才会分配内存,必须通过类的实例(new 的对象)来引⽤。
实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。
二、实验内容: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;}运行结果:。