对象Object:
- 状态state,保存在变量(variables)或称数据字段(data field)里
- 行为hehavior,借助方法(methods)来实现
类class:
- 属性,它是对象的状态的抽象,用数据结构来描述类的属性。
- 操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
类与对象的关系:
- 类是对象的模板;对象是类的具体化,或称为类的实例(instance)。
对象实例化:
- 类定义完成后需要依靠对象进行操作,对象定义格式:
类名称 对象名称 = new 类名称() ;
- 一旦有了对象, 就可以用对象的属性或者方法:
- “对象名称 .属性”
- “对象名称 .方法()”
- 构造方法定义:
- 在一个类中定义的方法名称与类名称相同,且无返回值的方法,称为构造方法
- 当类中已经明确定义了一个构造方法时,无参构造方法将不再自动生成,需要手动生成;
- 类定义完成后需要依靠对象进行操作,对象定义格式:
对象在内存中的表示
- 声明+实例化
- 引用、指针、堆栈
- 对象拥有各自的内存空间,所以不会互相影响,而且发现每一个对象中实际上只保存属性,并没有保存方法。
- 所有的方法都是每个对象所共同拥有的,保存在全局代码区之中
- 一块堆内存可以同时被多个对象名所同时指向
- 对象的引用传递,就是使用内存表示出关系。引用传递的操作的核心就是内存地址的传递
static关键字在类中可以声明属性或方法
- 声明的属性将称为全局属性
- 声明的方法将成为类方法
- 全局属性拥有可以通过类名称直接访问的特点,所以这种属性又称为类属性
- 类方法也可以通过类名称直接访问
构造方法重载
- 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
- 构造方法作为方法,当然可以重载
- 调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。
- “构造方法的主要作用是:在对象实例化时,向属性传递一些初始化内容。”
- 用this调用本类中其他构造方法时,this语句必须放在构造方法中代码的首行。
- 类中存在多个构造方法时,需按顺序书写:
- 将参数少的构造方法放在最前面,参数多的构造方法放在最后面。
OO三大特征-封装性
- 封装性:类内部的定义对外部不可见
- 规范:
除非特殊情况,否则均按照如下编写方法:
所有的属性都设定为private型
编写getter以读取该属性值
编写setter以修改该属性值
要根据实际需要谨慎权限选择开放程度。
private->default->protected->public
- 规范:
- 封装性:类内部的定义对外部不可见
OO三大特征-继承
- 作用是利用子类扩充已有类的功能。
- 子类可以继承父类的属性、方法,对于所有的公共操作是可以直接继承的,而所有的私有操作是无法直接继承
- 一个子类只能继承一个父类,属于单继承,不能同时继承多个父类,但在Java中允许多层继承
- 方法的覆写
- 方法的覆写就是指一个子类中定义了一个与父类完全一样的方法名称,包括返回值类型、参数的类型及个数都是完全一致
- 但是需要注意的是,被覆写的方法不能拥有比父类更严格的访问控制权限。
OO三大特征-多态
- 多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
- 多态性是允许将父类对象设置成为一个或更多该类的子类对象相等的技术 —Charlie Calverts
- 允许将子类类型的指针赋值给父类类型的指针。
- 尽管可以用超类声明对象,用子类实例化,完成向上转型,但父类无法使用子类方法。
区分方法重载、方法重写
方法重载:“不同的参数,不同的行为”
public 周六(加班){ 上班 }
public 周六(不加班){ 打游戏 }方法重写:“同样的代码,不同的行为”方法名相同 返回值相同 参数相同
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
即外壳不变,核心重写!
我–public 周六(加班){ 摸鱼 }
工贼–public 周六(加班){ 当个奋斗逼 }
Coffee and Tea Brewing Machine Case
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 963614756@qq.com。