类与对像的关系
1:必须先有类,后有对像
2:每一个类,可以创建许多相同的对像
3:对像是类的一个实例
4:类则是对像的一种集合。
5:与其每次研究不同的对像,还不如研究一类对像。因此在大部分的时候,我们所关心的是类。
6:但是缺少对像就无法使用类。
7:我们把对像也经常说成类的外部用户(重要)
类的举例:[在一个源文件里面分别定义一个类和两个类来完成]
定义一个类tcalc:让用户输入两个数和一个操作符来实现求运算的结果
定义一个类tkt:让用户可以调节温度,调节模式,调节风速等。
定义个类:tprimre:来判断一个数是否是素数。
编写一个类,来求出一个矩形的面积
编写一个类,来求两个数最大值
假设:苹果:2.20,桔子:2.0,葡萄:1.8,香蕉:1.6,编写一个类来实现让用户输入一种水果
和重量,马上得到它的金额,输入付款马上得到找零
类的封装性
类的封装性:
类的封装性是把数据和代码组合在同一个结构中.封装性有两个目的:
第一:通过封装使一部分成员充当类与外部的接口,而将其它的成员隐藏起来。外界只能够按照接口的 规则去与类中的成员发生联系。使得外部不能修改类中受保护的数据。
第二:通过封装可以使用外界更能简单的使用类的接口,而不必知道其中的实现细
注意:封装不是封闭,也就是说该隐藏时,要隐藏,该公开时就公开
实施类的封装性的手段
java实施类的封装性的手段是通过类成员的访问控制域来达到封装性的目的。
1: 只有类的实例(对像)才能使用类中的数据成员和成员函数,类本身是不能使用使用的。
2: 并不是类的对像能够使用类中定义的一切数据成员和成员函数的
3: 换句话说,在java中充许程序员去设计类中的某个属性或方法能够被类的对像来引用,当然也可以为了需 要而在类中设置一些属性或方法不能被类的对像来引用
4: 如果把访问控制关键字为:private的话,则类的对像不能引用该属性和方法,但是在类的方法却可以访问
6: 如果把访问控制关键字为:public的话, 则类的对像与类的方法都可以访问
7: 如果把类的方法或属性定义在public中的话,我们称这些属性和方法为公有成员,由于这些成员能够被类的 外界(对像)来使用,所以我们把它们类的称为接口,以后谈到接口就表示对外公开的
8: 如果把类的方法或属性定义在private中的话,由于这些属性与方法不能被类的外界(对像)使用,故我们称 之为类的私有成员,很显然,私有成员对于外界是隐藏的。
9: 之所以要用private是用来实现封装功能,即保护类中的私有成员不被修改.
10: 如果在定义时,不加任何限制符则说明该成员的控制级别相当于public级别
11: 设计一个类是为了利用它,要能够利用它,就必须提供必要的外部接口
修改上面的编写的类
定义一个类用来m!+n!的阶层
类的构造函数
什么是类的构造函数
人有生也有死。相同的对像也有产生与消亡。当我们通过一个类定义一个对像时,就表示一个新的对像产生了。当对像使用完之后(程序结束),就表示这个对像消亡了。在java里面,当通过类声明一个对像,java会自动去调用类的构造函数,当这个对像使用完之后,java会自动去回收分配给对像的内存。综上所述得到如下结论:
1:声明一个对像并不会该对像分配存储单元,程序员必须显式地为对像分配存储单元,因为java不会自动地为 对像分配存储单元,但是不必显示的删除存储单元,因为无用的单元,java的垃圾回收器会自动回收
2:new运算符是实例化对像并给对像分配存储单元的方法,调用了new运算符的时,构造函数会自动执行
3:构造函数的作用就是在对像被创建时(定义类的对像时)时利用特定的值,将对像初始化为一个特定的状态
4:构造函数也是类的一个成员函数(方法),它的名字必须与类名相同,并且不能返回值
即:类名(参数列表)
5:构造函数不能返回值,但是不能写上void,也不能加上任何的类型的标识符
6:构造函数通常要声明成为公有函数(public里面),作为接口,被外界使用
7:与其它成员函数不一样的是,构造函数会在对像被创建时被自动调用
8:构造函数不是一个类所必须的,如果一个类没有构造函数,java会自动生成一个默认的构造函数,在内部偷 偷的来执行,相反如果一个类中有构造函数,则java就会去执行用户定义的构造函数,而不会去执行默认的构 造数,默认的构造函数是一个与类同名,没有任何参数的函数
9:一个类里面可以有多个不同参数的构造函数
10:如果某个类中的数据成员是另外一个类的对像,则在创建这个类时,内嵌对像将会被自动创建,然后
才是对本类对像的创建
构造函数的应用
1:编写一个类,来求出一个矩形的面积 (初始化矩形的长宽)
2:编写一个类,来求两个数最大值(初始化两个数)
3:编写一类,判断一个数是否是素数(初始化一个数)
4:苹果:2.20,桔子:2.0,葡萄:1.8,香蕉:1.6,编写一个类来实现让用户输入一种水果 (初始化水果和重量)
和重量,马上得到它的金额,输入付款马上得到找零
说明:
1:初始化的类的成员既可以是基本的数据成员,也可以是另一个类的对像。
[类的组合,在一个类中来引用另外一个类的对像]
求m!+n!
一个类:求一个数的阶层。jc类
一个类:求一个数的和。 sum类[sum类要引用到jc类的对像]
class jc
{
private int saven;
public jc(int n)
{
saven=n;
}
public long dojc()
{
int t=1,i;
for(i=1;i<=saven;i++)
t*=i;
return t;
}
}
class sum
{
private jc saven1,saven2;
public sum(jc n1,jc n2)
{
saven1=n1;
saven2=n2;
}
public long dosum()
{
return saven1.dojc()+saven2.dojc();
}
}
class demo
{
public static void main(String st[])
{
jc demo1_jc=new jc(3);
jc demo2_jc=new jc(4);
sum demo_sum=new sum(demo1_jc,demo2_jc);
System.out.print(demo_sum.dosum());
}
}
2:设计一个名为rect的矩形类,基属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积
1:一个类用来描述坐标(point)
2:一个类用来计算矩形的面积(rect)
import java.lang.*;
class point
{
private int savep1,savep2;
public point(int px,int py)
{
savep1=px;
savep2=py;
}
public int getx()
{
return savep1;
}
public int gety()
{
return savep2;
}
}
class rect
{
private point savep1,savep2;
public rect(point p1,point p2)
{
savep1=p1;
savep2=p2;
}
public int area()
{
return Math.abs(savep1.getx()-savep2.getx())*Math.abs(savep1.gety()-savep2.gety());
}
}
class demo
{
public static void main(String st[])
{
point point_demo1=new point(1,4);
point point_demo2=new point(3,2);
rect rect_demo=new rect(point_demo1,point_demo2);
System.out.print(rect_demo.area());
}
}
3:设计一个订单类订单明细类。在订单类中定义一个添加方法来添加订单明细类的信息
class orderdetail
{
private String shopname;
private int count,price;
public orderdetail(String oshopname,int ocount,int oprice)
{
shopname=oshopname;
count=ocount;
price=oprice;
}
public int getcount()
{
return count;
}
public int getprice()
{
return price;
}
public String getshopname()
{
return shopname;
}
}
class order
{
private int n;
private orderdetail a[],save[];
private String saveorderid,saveorderdate,savepeople;
public order(String orderid,String orderdate,String people)
{
saveorderid=orderid;
saveorderdate=orderdate;
savepeople=people;
}
public void add_order(orderdetail add)
{
int i;
n++;
if (n==1)
{
a=new orderdetail[1];
a[0]=add;
}
else
{
save=new orderdetail[n-1];
for(i=0;i<n-1;i++)
save[i]=a[i];
a=new orderdetail[n];
for(i=0;i<n-1;i++)
a[i]=save[i];
a[i]=add;
}
}
public int count()
{
return n;
}
public int getmoney()
{
int i,sum=0;
for(i=0;i<a.length;i++)
sum+=a[i].getcount()*a[i].getprice();
return sum;
}
public void printorder()
{
int i;
System.out.println("订单编号\t订单日期\t经手人");
System.out.println(saveorderid+"\t\t"+saveorderdate+"\t"+savepeople);
System.out.println("--------------------------------------------");
System.out.println(" 商品名\t数量\t单价");
for(i=0;i<a.length;i++)
System.out.println(" "+a[i].getshopname()+"\t"+a[i].getcount()+"\t"+a[i].getprice());
System.out.println("--------------------------------------------");
System.out.println(" 共有商品:"+n+" 单据金额:"+getmoney());
}
}
class demo
{
public static void main(String st[])
{
orderdetail od1=new orderdetail("彩电",10,1200);
orderdetail od2=new orderdetail("空调",10,1000);
orderdetail od3=new orderdetail("电话",10,500);
order order_demo=new order("OR1287","2005年7月12日","didy");
order_demo.add_order(od1);
order_demo.add_order(od2);
order_demo.add_order(od3);
order_demo.printorder();
}
}
评论