java对象
英语:Object-oriented programming,缩写:OOP;
我们开发的程序是给用户使用的,而我们的程序是使用对象来完成产生的。对象可以看成是对问题的描述的一种解决方案,它与问题空间之间一一映射。也就是将问题抽取成为对象集合。
在java中以class关键字来定义类的对象,类包含了元素和功能,是一种引用类型,和Int、Float等类型是一样的道理,只不过Int、Float等这些基本类型是java内置了的,所以我们可以拿来即用,而我们自定义的对象需要我们进行实例化后使用。
java面向对象的服务提供者
我们可以将对象看作服务提供者,比如手机这个对象,我们可以用它来聊天,打开闪光灯,砸核桃等。
当每个对象都有各自独特的服务的时候,我们在使用的时候就很方便高效了,我们知道要实现什么功能,就拿什么对象来使用,如果我们对多个对象的各个方面都“组合”的很好的话,那么对代码来说是高内聚的,我们都约定俗成开发程序高内聚是我们追求你之一。
java面向对象的封装
假设在合作开发的时候,有人负责创建类来提供服务,有人收集使用类来快速实现程序开发,我们把第一种人暂且叫类(服务)创建者,第二种人叫做使用服务(类)者。
那么在这种情况下,创建者对自己的类只需要暴露必需的功能给使用者就可以了,使用者无需关心创建者是怎么样实现类的细节,拿来用就好了。这样创建者会对比较“脆弱”的代码进行封装,使用者无法触及,防止使用者随意修改,减少了bug的产生,还有就是创建者对封装的这些代码修改不会对使用者造成影响,比如类创建者在一开始创建类的时候某功能写的简单了,后来为了提高性能,那么修改这部分代码,实际上对使用者是毫无影响的。
java用private关键字来限定只有类创建者和类内部方法可以使用,其它人都无法使用。
如果是使用public修饰的话就相当于完全暴露了,任何人都可以使用。
还有protected是让继承的子类可以使用,但是不能使用父类被private修饰的属性。
默认不指定修饰的时候,同一包下的其它成员都可以访问。
所以封装是有必要的,在这种分离的情况下,提高了安全性。
java对象组合
一个对象含有另一个对象,这就是组合。 比如手机这个对象含有相机对象,我们创建了相机对象,可以内置于手机对象中,这样做的好处是使用对象间灵活高效的。
代码提现:
1 | public class Phone { |
java面向对象的继承
当你发现对象之间存在诸多相似性的时候,并不需要每个都创建独立的对象,可以找出他们的相同点作为基类(父类),进而在衍生出差异的类(子类),这样子父类就包含子类所有共享的行为特性了,子类就以不同的实现方式存在。
关于继承可以在Java 继承是什么龟查看。
java面向对象的多态
狗可以称为动物,猫可以称为动物。多态在于你可以不在意具体对象类型而使用它们共同的属性:
代码提现:
1 | public class Animal { |
1 | 输出: |
在这里可以看到dog和cat向上转型为Animal。向上转型是安全的,向下转型却是危险的,例如将Animal转为它的子类,因为此刻Animal既不知道是Dog还是Cat,所以向下转型还需要专门指定对象,即强制转换。
更多关于多态可以参考:Java 多态可以吃吗?
对象存储
因为java是在运行时才能确定对象的多少,所以有了动态存储对象的集合,集合提供了不同的接口和行为,它们之间效率不同,应用场景不同:Java 细数各种常见的集合
对象生命周期
对象的生成会占用内存资源的,所以需要销毁来释放内存资源,对象是在堆的内存池中动态创建的,java有一个专门的垃圾回收器,它知道对象在什么时候可以销毁,会自动的销毁从而释放资源且不会影响程序的正常运行。