java对象

英语:Object-oriented programming,缩写:OOP;

我们开发的程序是给用户使用的,而我们的程序是使用对象来完成产生的。对象可以看成是对问题的描述的一种解决方案,它与问题空间之间一一映射。也就是将问题抽取成为对象集合

在java中以class关键字来定义类的对象,类包含了元素和功能,是一种引用类型,和Int、Float等类型是一样的道理,只不过Int、Float等这些基本类型是java内置了的,所以我们可以拿来即用,而我们自定义的对象需要我们进行实例化后使用。

java面向对象的服务提供者

我们可以将对象看作服务提供者,比如手机这个对象,我们可以用它来聊天,打开闪光灯,砸核桃等。

OOP 面向对象
OOP 面向对象

当每个对象都有各自独特的服务的时候,我们在使用的时候就很方便高效了,我们知道要实现什么功能,就拿什么对象来使用,如果我们对多个对象的各个方面都“组合”的很好的话,那么对代码来说是高内聚的,我们都约定俗成开发程序高内聚是我们追求你之一。

java面向对象的封装

假设在合作开发的时候,有人负责创建类来提供服务,有人收集使用类来快速实现程序开发,我们把第一种人暂且叫类(服务)创建者,第二种人叫做使用服务(类)者。

那么在这种情况下,创建者对自己的类只需要暴露必需的功能给使用者就可以了,使用者无需关心创建者是怎么样实现类的细节,拿来用就好了。这样创建者会对比较“脆弱”的代码进行封装,使用者无法触及,防止使用者随意修改,减少了bug的产生,还有就是创建者对封装的这些代码修改不会对使用者造成影响,比如类创建者在一开始创建类的时候某功能写的简单了,后来为了提高性能,那么修改这部分代码,实际上对使用者是毫无影响的。

java用private关键字来限定只有类创建者和类内部方法可以使用,其它人都无法使用。

如果是使用public修饰的话就相当于完全暴露了,任何人都可以使用。

还有protected是让继承的子类可以使用,但是不能使用父类被private修饰的属性。

默认不指定修饰的时候,同一包下的其它成员都可以访问。

所以封装是有必要的,在这种分离的情况下,提高了安全性。

java对象组合

一个对象含有另一个对象,这就是组合。 比如手机这个对象含有相机对象,我们创建了相机对象,可以内置于手机对象中,这样做的好处是使用对象间灵活高效的。

OOP

代码提现:

1
2
3
4
5
public class Phone {

private Camera camera;

}

java面向对象的继承

当你发现对象之间存在诸多相似性的时候,并不需要每个都创建独立的对象,可以找出他们的相同点作为基类(父类),进而在衍生出差异的类(子类),这样子父类就包含子类所有共享的行为特性了,子类就以不同的实现方式存在。

关于继承可以在Java 继承是什么龟查看。

java面向对象的多态

狗可以称为动物,猫可以称为动物。多态在于你可以不在意具体对象类型而使用它们共同的属性:

代码提现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Animal {

public void eat()
{
System.out.print("吃东西。。");
}
}


public class Dog extends Animal {

@Override
public void eat() {
System.out.println("吃骨头");
}
}


public class Cat extends Animal {

@Override
public void eat() {
System.out.println("吃鱼");
}
}


public class Main {

public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
eatSome(dog);
eatSome(cat);
}

static void eatSome(Animal animal)
{
animal.eat();
}
}

1
2
3
4
输出:

吃骨头
吃鱼

在这里可以看到dog和cat向上转型为Animal。向上转型是安全的,向下转型却是危险的,例如将Animal转为它的子类,因为此刻Animal既不知道是Dog还是Cat,所以向下转型还需要专门指定对象,即强制转换

更多关于多态可以参考:Java 多态可以吃吗?

对象存储

因为java是在运行时才能确定对象的多少,所以有了动态存储对象的集合,集合提供了不同的接口和行为,它们之间效率不同,应用场景不同:Java 细数各种常见的集合

对象生命周期

对象的生成会占用内存资源的,所以需要销毁来释放内存资源,对象是在堆的内存池中动态创建的,java有一个专门的垃圾回收器,它知道对象在什么时候可以销毁,会自动的销毁从而释放资源且不会影响程序的正常运行。

相关资料