对象
对象的意义和作用
对象的意义
- 在之前,程序员们所写代码的思维为顺序写入和执行,这就导致了代码冗余和复杂性。为了解决这一问题,人们引入了对象这一概念,需要执行某种操作的时候则就调用该对象由这个对象去完成。极大简化了代码和疏通了思维逻辑性。
作用
- 通过把一个对象的属性行为给定义出来,后期对这个对象所执行或者调用某一个方法和属性,能达到简化代码且复用性。所以对象这个概念至关重要。
对象的创建方式
类
-
类就可以理解为一个生产加工对象的工厂。需要先在类中定义好该对象所需要具有的属性,行为等,然后通过类来实例化一个对象。
-
变量
-
成员变量
- 成员属性定义在类中,成员属性对整个类都可见。
- 储存方式:堆
- 生命周期:随着实例化出的对象使用完毕被回收而销毁。
-
局部变量
- 定义在方法内中,只对方法内可见。
- 储存方式:栈。
- 方法执行完毕后被销毁。
-
-
-
实例化
-
通过在main方法中实例化对象来使用。
- 格式:(如果定义了Person类)
Person p1 = new Person();第一个Person为一个引用类型,需要用一个类型去接受这个引用,后面new为关键字,可以理解为实例化一个对象的关键字。再后面的方法为执行类的构造方法从而生成对象。
- 格式:(如果定义了Person类)
-
-
构造方法
-
通常,我们不会把一个对象的属性给写死,我们会灵活些自定义这个对象的一些属性。这就需要用到类的构造方法,通过类的构造方法来实现这一效果。
-
我们可以先定义一些属性但是不给它具体的值,我们需要什么值过后再自己去定义,所以我们可以先在类中定义一些属性当需要实例化对象的时候通过new后面的构造方法中传入值所生成对象。
-
this关键字
- 作用:指代当前调用该方法的对象。
- 在构造方法中我们的形参和类的属性同名时系统会优先识别作用域比较小的。所以我们这个时候就需要用到this来指代当前调用构造方法的这个对象(就是我们要实例化出来的这个对象),从而调用this.name来指代当前对象的属性,利用this.name = name;就可以达到从外部传进来的形参赋值给当前对象的这个属性。
-
-
方法名和类名相同。
-
如果没有写构造方法则系统会自动生成一个空构造方法。
-
-
构造代码块
-
在类中直接一对花括号就叫做构造代码块。
-
特点
- 由于构造代码块优先与构造方法执行,所以一般用来初始化对象。
-
对象的三要素
封装
-
把对象的属性,行为等封装起来,对属性和行为添加查看权限的动作称之为封装。
-
典例:JavaBean,属性全部私有化,若要操作属性则提供了getXXX,setXXX方法的类称之为JavaBean。
-
查看权限:
- pravite:私有,只有自己能看见。
- default(friendly):默认,如果不写权限修饰符的话则默认为default,也叫friendly。自己和同包的能看见。
- protected:被保护的。除自己能看见之外,还有同包,子类能看见。
- public:共有的,自己,同包,同类,不同包不同类都能看见和使用。
-
多态
-
一个对象有多种状态,称之为多态。
-
父类方法的重写
-
在子类中,如果父类方法不是子类所需要的则可以选择重写父类方法。但是重写父类方法则必须满足几个要素。
- 方法名必须一致。
- 返回值类型如果为基本数据类型/VOID,则重写方法的返回值类型必须一致。
- 如果父类返回的类型为引用类型,则重写方法必须一致或为其子类。
-
-
父子类的代用
- 在某些方法中,子类可以当做父类使用(例:如果要传入一个对象执行方法,且改对象为父类的子类,则可以直接形参设置为父类但是传入子类。这样可以达成只要是子类对象都可以调用。)PS:父类不能当子类使用。
-
继承
-
如果有很多个类具有相同属性或方法以及具有从属关系,则可以利用类的继承来实现具有从属关系的类从父类派生而来的操作。这样子类就会具有父类的属性且还能自己添加属性等。这样的操作叫做继承。
-
extends
- 在类中通过extends关键字来实现类的继承。
-
super
- 利用extends继承过后,需要利用super关键字来再子类中充当一个虚拟父类对象,且需要利用super关键字来实现子类实现父类的构造方法。需注意:构造方法需要写在第一行。
-
在Java中一个对象只能继承一个对象,不能实现多继承。
-
XMind - Trial Version