java中“类”和“对象”到底有什么联系
object和Class配合工作原理
【新手可忽略不影响继续学习】 Class是"类"的意思,是抽象的,并没有具体的说是哪个东西。而object是具体的,实实在在存在的一个东西,一个物体。比如车就是一个类,而不是一个object,因为车这个概念是抽象的,并没有具体指明是哪辆车。而车牌号为京HT3113的这辆车就是一个object,因为它实实在在的存在。而另外一辆车牌号为京jw2344车是另外一个实实在在的object,这两个object属于一类叫"车"。车这一类有别于另外一类:窗体window。window是类而不是object,原因是你并没有实实在在,具体的指明,@马克-to-win是哪一个window,而我电脑上,暴风的window或迅雷的window就是两个具体的实实在在的object。
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
【新手可忽略不影响继续学习】 类相对于对象来讲是抽象的,但好处是可以总结提取出所有对象的共同性,比如车这类都是有四个轮子的,而window这类都有宽度,且window这类可以被关闭。这样属于window这一类的对象,比如暴风window或迅雷window都有宽度,@马克-to-win且都可以被关闭。福利来了,"关闭"这行为,所有window对象都有。具有共性的”关闭”行为如果放在类中只需放一份,而放在对象中却要放n份,我们立刻看出了类和对象协同工作的好处。好,综上所述,我们给出代码:
本章源码
class Window {
int width;
int height;
/*close放在类中只需放一份。省去重复工作, 每个object都可以用, 当调用baoFengObject.close();时, 以下方法被执行,其中width变量,是baoFengObject的属性,而不是xunLeiObject的属性。 */
void close() {
System.out.println("kuan" + width + "的window被关闭。");
}
}
public class Test {
public static void main(String[] args) {
/*Window baoFengObject = new Window();和 int a=3如出一辙, int a=3说明a是int这个类型的,而不是float
这个类型的。Window baoFengObject = new Window(); 说明baoFengObject这个对象属于window这个类, 而不是
车这个类的, 而且int a=3 在内存中分配了a这个空间等于3,而Window baoFengObject = new Window();时
baoFengObject在内存 中初始化了,被分配了空间,其中width初始化成了0 @马克-to-win*/
Window baoFengObject = new Window();
baoFengObject.width=999;//999代表暴风
baoFengObject.height=999;//999代表暴风
Window xunLeiObject = new Window();
xunLeiObject.width=111;//111代表迅雷
xunLeiObject.height=111;//111代表迅雷
/* 有新手怎么都不明白下面一句的意思?什么是baoFengObject.close(); ,好,在前面java一章,我们学过方法,method,子函数,这些都是一回事,close()方法,close()子函数总明白吧?这里 baoFengObject.close(),说的就是调用baoFengObject的close()方法*/
baoFengObject.close();
xunLeiObject.close();
}
}
结果是:
kuan999的window被关闭。
kuan111的window被关闭。
补充:c语言子函数背景知识:
public class Test {
static void close() { //这是子函数
System.out.println("kuan" + "的window被关闭。");
}
public static void main(String[] args) {
close();//这是主函数,无输入参数,无返回值
System.out.println("完了");
}
}
输出结果:
kuan的window被关闭。
完了
作业:
1)做一个类名字叫Phone,有两个属性,分别叫做pinpai和jiage,再编一个方法叫print,生成一个对象叫做huawei,pinpai是字符串类型,名叫华为。jiage的类型是int,是3000。在测试类当中打印他自己的价格和品牌。再生成一个对象,叫做苹果,价格是4000元,品牌是苹果。
class Phone{
String pinpai;
int jiage;
void print() {
System.out.println(pinpai + jiage);
}
}
public class Test {
public static void main(String[] args) {
Phone huawei = new Phone();
huawei.pinpai="华为";
huawei.jiage=3000;
Phone pingguo = new Phone();
pingguo.pinpai="苹果";
pingguo.jiage=4000;
huawei.print();
pingguo.print();
}
}
2)把过去找大数的作业改编成放在现在的类里。(专门做了一个视频一步一步的演示怎么做的。)
我们把c语言中的一个例题找大数拿来:
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 2;
int k = zhaodashu(a, b);
System.out.println(k);
}
static int zhaodashu(int x, int y) {
int c = 0;
if (x < y) {
c = y;
}
if (x > y) {
c = x;
}
return c;
}
}
仿照上面的例子,做一个类MyMath,里面没有属性,但有个方法叫zhaodashu,找大数,输入参数有两个,返回值是大数。主程序测试类还是Test。
答案:
class MyMath {
int zhaodashu(int x, int y) {
int c = 0;
if (x < y) {
c = y;
}
if (x > y) {
c = x;
}
return c;
}
}
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 2;
MyMath huawei = new MyMath();
int k =huawei.zhaodashu(a, b);
System.out.println(k);
}
}
3)把上一章的9.1作业找质数,改编一下,做一个类MyMath,里面有个方法叫findPrime,找质数,输入参数有两个(上限和下限),无返回值。