两个类共用第三个类的对象 java_二、Java面向对象(3)_类和对象

2018-04-29

类和对象

一、什么是抽象

在计算机科学中,抽象是一种过程,在这个过程中,数据和程序定义的形式与代表的内涵语言相似,同时隐藏了实现细节。

抽象:一个概念或者想法不和任何特定的具体实例绑死。

简单地说:“抽象只从正确的角度,透露对象的某些相关细节。”

在面向对象编程理论中,抽象涉及到定义抽象对象的语言基础,它到底如何工作、如何获取和改变状态,并与系统中的其他对象进行“交流”。

抽象在任何编程语言中的许多方面起作用。从创建子程序到定义接口来,生成低级语言调用,例如设计模式

参考:

二、对象和类的关系

1.对象

状态(属性)

行为(功能)

---------------------------------------------------------------------------------------------------------------------------

在现实中任何存在的事物都可以看成对象 通过其属性进行分类

比如生物包括动物等不同种类,动物又分猫科等 猫科又分特定物种

而每一个对象都是一个单独的个体,就好像世界上不存在两个你

在程序中也是如此,类的继承就好像生物包括动物、动物包括猫科这样

而对象也是通过不同的类来创建出来的单独的个体

类之间只存在继承关系(extends ) 就和上边说的 生物包括动物 动物包括猫科

而接口相当于拥有能力 一个生物可以拥有很多能力 但是他只属于一个类别

所以说只有接口才可以implements

对此 你也可以理解为extends过来的是父母教的 implements 是自学成才。

------------------------------------------------------------------------------------------------------------------------------

通过对多个同类型的对象分析,我们可以把对象抽象成类。

2.类

具有相同属性(状态)和行为(功能)的对象的抽象就是类。  类实际上是一种数据类型。

因此,对象的抽象是类,类的具体化是对象(类的实例化就是对象)。

类具有的属性也就是对象的状态,使用成员变量定义,用来封装数据。

类具有的功能也就是对象的行为,定义在方法里面。

类是对象的模板/类型。创建一个对象,就是使用类作为构建该对象的基础。描述类少不了对象,描述对象也少不了类。“先有鸡还是先有蛋”。

在面向对象编程里,先有类才有对象,如果没有类对象无法实例化。

对象是类的实例,类是对象的模板。(根据模板来创建实例)

三、类的定义

[修饰符] class 类名{

//定义成员变量(字段/field)

//定义成员方法

}

b66d2ba5353ffc44cd70389970ec5d65.png    

5b4ccd01cb5f927e869466910235169c.png

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

定义类的注意事项:

1)如果类使用了public修饰符,则当前文件名必须与类名相同。

2)类名最好使用名词表示,因为类表示一类事物。类名首字母大写,如果是多个单词组成则使用驼峰表示法命名,如:EmployeeSetting

3)在面向对象学习过程中,专门为描述对象提供一个类,该类不需要main方法,我们再专门定义一个测试类用来运行程序。

四、对象基本操作

a)对象的创建和使用

1.(根据类)创建对象的语法:

类名  变量 =  new 类名();

2.给字段设置值

对象变量.字段名 = 该类型的值;

3.获取字段值

该字段类型 变量 = 对象变量.字段值;

4.通过对象调用方法

对象变量.方法名([实参]);

1e7a6e7e285297b23aaffb8eab250843.png

b)对象的实例化过程

先为对象分配空间,并按属性类型默认初始化

ps:八种基本数据类型,按照默认方式初始化,其他数据类型默认为null

不同类型的成员变量的初始值:

49d8f095464015ee21d12af597215a39.png

对象实例化内存分析:

a1588b2c0af67e9ad5c690e8cc999b61.png

c)对象的生命周期

对象的打印操作:object的toString方法

对象的比较操作:“==”对于基本数据类型比较的是值,对于引用类型比较的是内存中的地址值

如果对象拥有完全相同的数据,想让他们相等,使用object的equals方法

对象的生命周期:

开始:使用new创建对象的时候,内存中就会分配一个空间

结束:当堆中的对象没有被任何变量引用,此时改对象就成了垃圾,等着被垃圾回收器(GC)回收垃圾,当改垃圾被回收的时候,对象就被销毁了。(回收垃圾的目的是为了释放更多的内存空间)

d)匿名对象

没有名称的对象,创建对象之后没有赋给一个变量。

new Servant();//匿名对象只是在堆中开辟一块新的内存空间,但是没有把该空间的内存地址赋给任何变量

因为没有名称,所以匿名对象只能使用一次。

------------------------------------------------------------------------------------------------------------

普通申明一个对象是这样的

A a = new A();

那么这个时候a就是类A的一个对象,这个对象名字就是a

再来看下面一个例子:

method(A a);

整理method是一个方法,他需要传递一个对象来作为参数,那么这个时候有2种方法:

方法1:

A a =new A();

method (a);

方法2:

method (new A());

方法2中new A()就是一个匿名对象,他没有名字。这样可以理解了吧。

--------------------------------------------------------------------------------------

匿名对象的用法:

1)当对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。

如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。

2)匿名对象使用方法二:可以将匿名对象作为实际参数进行传递。

e)学生缴费案例

学生类(Student)有两个字段:name(名字)和isFee(是否交学费的状态),有一个方法交学费(fees)。

每一个学生都是通过Student类new出来的一个对象,现在创建一个数组存放多个学生对象,再判断数组中的学生是否已经交费,如果没有则调用交学费的方法。

代码实现:

1 classStudent2 {3 String name;//名字

4 boolean isFee = false;//是否交费,默认未交费5

6 //定义交学费的方法

7 voidfees(){8 isFee = true;9 }10 }11

12

13 //测试类

14 public classTestDemo15 {16 public static voidmain(String[] args){17

18 Student s1 = newStudent();19 s1.name = "李白";20 s1.isFee = true;21

22 Student s2 = newStudent();23 s2.name = "鲁班";24

25

26 Student s3 = newStudent();27 s3.name = "张三";28 s3.isFee = false;29

30 Student s4 = newStudent();31 s4.name = "李军";32 s4.isFee = true;33

34 //创建数组用来存放多个学生对象

35 Student[] arr = newStudent[] {s1,s2,s3,s4};36 //使用for-each循环迭代数组元素

37 for(Student ele : arr){38 //System.out.println(ele.name + "," +ele.isFee);39

40 //判断是否交费,如果没有交费则调用fees方法

41 if(!ele.isFee){42 ele.fees();43 }44 }45 for(Student ele : arr){46 System.out.println(ele.name + "," +ele.isFee);47 }48

49 }50 }

输出结果:

de4fc88dc434deef0f1163ac6b525510.png

内存分析:

f037798f6d62e3be0911921d876f14a1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值