
定义: 在系统中,对象是用于客观描述一个事物的一个实体,而类这是这类实体的抽象,它是构成系统的一个基本单位。 一个对象由一组描述对象的属性和一组描述对象的动作组成。
类的实例化可以创建对象,每个对象都有它的生命周期,对象的生命周期可以简单的归为:生成、使用、销毁三个阶段。
在JAVA语言中,一个类如果不存在引用时,那它就是一个无用的对象,JAVA的垃圾回收器会自动扫描JVM虚拟机,对这些没有被引用的垃圾对象进行回收,开发者也可以显示调用System.gc()方法告知垃圾回收器进行回收垃圾对象。
但是并不意味着在调用完这个方法后垃圾回收器就会垃圾去回收,具体的回收时间是由垃圾收回器自己确定,调用这个方法只是给垃圾回收器发送一个“信号”,告诉它现在内存不够或者可以去存在垃圾对象需要它回收。
面向对象的三大特征:封装、继承、多态
封装: 隐藏对象的属性和实现细节、只提供访问的公共方法,实现的方式是通过访问修饰符来限定。

继承: 继承表示的是一个类拥有另一个类的相关信息,通过关键字extends实现,被继承的类叫父类(基类、超类),得到继承信息的类也叫子类或派生类,JAVA中类只能单继承,但是可以实现多个接口。

多态: 同一个行为可以有不同的表现形式的能力。具体来说就是一个类型可以有多种表现的形式,如:动物可以是狗、也可以是猫,具体如图所示:

对类型解耦,可以使用父类或者接口接收子类对象
可替换性,如实例一个猫对象,可以用动物接收:Animal cat = new Cat()
可拓展性,多态是对象的多种表现形式的体现,很易于拓展,如动物除了猫狗外,还可以是鸡鸭鱼等
更灵活,可以随意拓展新的表现形式而不影响其他的形式
1、继承父类或者实现接口
2、重写
3、使用父类/接口接收子类对象

``
class Animal2 {
void draw() {}
}
class Dog extends Animal2 {
@Override
void draw() {
System.out.println("汪汪");
}
}
class Cat2 extends Animal2 {
@Override
void draw() {
System.out.println("喵喵");
}
}
class Fish extends Animal2 {
@Override
void draw() {
System.out.println("泡泡");
}1、易于理解,有更好的可读性
2、平台无关性,一次编译,处处运行
3、提供了许多类库,方便开发者的工作,减少开发时间
4、提供了对web的支持
5、具有较好的安全性和健壮性(如垃圾回收)
6、去除了C++中难以理解,易于混淆的特性
方式1、 继承父类重写父类方法,关键字extends
/**
* 图形
*/
class Shape {
void draw() {}
}
/**
* 圆
*/
class Circle extends Shape {
@Override
void draw() {
System.out.println("Circle.draw()");
}
}
/**
* 正方形
*/
class Square extends Shape {
@Override
void draw() {
System.out.println("Square.draw()");
}
}
/**
* 三角形
*/
class Triangle extends Shape {
@Override
void draw() {
System.out.println("Triangle.draw()");
}
}方式2、 实现接口,重写接口方法,关键字implements
/**
* 图形
*/
interface Shape {
void draw();
}
/**
* 圆
*/
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle.draw()");
}
}
/**
* 正方形
*/
class Square implements Shape {
@Override
public void draw() {
System.out.println("Square.draw()");
}
}
/**
* 三角形
*/
class Triangle implements Shape {
@Override
public void draw() {
System.out.println("Triangle.draw()");
}
}方式3、 同一个类中方法重载
class Animal3{
/*
重载实现多态
*/
public void call(){
System.out.println("无参数的叫声");
}
public void call(String mode){
System.out.println("带参数的叫声");
}
}面向对象编程是JAVA语言的核心特点,能否正确理解对象含义对后续的JAVA学习有着至关重要的作用,本文通过通俗的例子介绍了对象的含义和一些特点,希望能够帮助到自学JAVA的小伙伴,下一篇文章再见啦。