面向对象
面向过程:着眼于整个程序的执行流程和功能的具体实现,是一个执行者的身份
面向对象:着眼于找到能够帮助自己完成此功能的人,是一个领导者的身份,更符合日常生活中人们处理事情的思想
一. 类和对象
类:类型,一类事物,是这类事物的基本信息和功能行为所组成的集合
基本信息->属性
功能行为->方法
例如:
研究鸟类型
属性:品种、毛色
方法:飞,吃
对象:类的一个具体的实例,获取对象需要创建对象(实例化)
类和对象的关系:
1、类是一个抽象的概念,对象是一个具体的概念
2、任何对象都具有所属类中所有的属性和方法
例如:
研究鸟对象
属性:品种-鹦鹉,毛色-绿色
方法:飞-普通的飞,吃-吃游客给的食物
二. 自定义类型
格式:
public class 类名{
属性
方法
}
三. 创建对象(实例化)及调用
创建格式:
数据类型 对象名 = new 数据类型();
调用格式:
调用属性:对象名.属性;
调用方法:对象名.方法(参数列表);
封装
继承
多态
封装
概念:
生活:快递、机箱
代码:方法、类
问题:在对属性进行赋值时,可能赋了不符合生活逻辑的数据
原因:对数据的合理性没有进行判断
解决:
1、使用关键字private修饰属性
2、对外提供该属性的setter/getter方法
注:布尔类型的getXxx()应该使用isXxx()
关键字private
作用:对成员进行私有化,这个成员只能在本类中使用
关键字this
表示:当前方法的调用者
好处:
1、提高代码的复用性
2、提高代码的安全性
标准实体类的定义:
1、私有化的属性
2、属性的setter/getter方法
构造函数
作用:
1、创建对象
2、基于悠闲执行的特点,可以在构造函数中完成基础配置
3、创建对象的同时,对属性进行初始化
特点:
1、无返回类型,viod都不能写
2、方法名和类名相同
3、构造函数优先于类中方法的执行,且每次创建对象都会执行
注:
1、每个类都有一个隐士的无参的没有方法体的构造函数
构造函数的重载
概念:多个构造函数具有不同的参数列表
细节:
1、使用this来区分成员和局部
2、无论属性有多少个,一般重载构造函数会写上全部的属性
3、如果构造函数从在了,那么默认的构造函数就不存在了
4、如果还想要通过不参的默认构造函数来创建对象,必须手动写出
标准实体类的写法
1、私有化的属性
2、无参的构造函数
3、全参的构造函数
4、属性的set/get方法
继承
概念:
子类可以直接访问到父类的(菲斯有)成员
继承主要研究的就是子类内容的共性抽取,前提是符合逻辑
注:
1、子类就是父类”,表示子类是它自身的同时也是父类
2、子类可以具有特性内容
好处:
1、提高了代码的复用性
2、提供了多态的前提
父类:超类、基类
子类:派生类、衍生类
格式:
public class 子类名 extends 父类名 {
}
子类访问变量:
1、访问局部变量:直接访问
2、访问成员变量:使用this语句
3、访问父类的成员边:使用super语句
继承关系中成员变量的特点
1、子类优先使用本类中的成员变量,如果没有则向上查找父类中是否有该变量。有则使用,没有则编译失败
重写:@Override
概念:子类对父类功能进行扩展
重写的要求:
1、方法名相同
2、参数列表相同
3、子类重写方法的返回类型必须是父类方法返回的类型一致,或者是它的子类
4、子类重写方法的范围修饰符必须大于等于父类的
权限(范围)修饰符:
范围从大到小:public protected [defalut] private
继承关系中的构造函数
1、任何一个类的构造函数都默认调用了父亲默认的无参构造函数
2、父类中的私有属性,子类可以通过重载构造函数,并在第一行调用父类的重载构造函数来完成创建子类对象的同时并对属性赋值
3、子类只能调用父类的一个构造函数,因为父类的构造函数只能出现在子类构造函数的第一行
super和this的作用
注:
1、调用本类的构造函数必须放在第一行
2、构造函数的调用只能出现在构造函数中
3、本类构造函数的调用不能与父类的构造函数并存
super
1、调用父类的成员变量
2、调用父类的成员方法
3、调用父类的构造函数
this
1、调用本类的成员变量
2、调用本类的成员方法
3、调用本类的构造函数
继承体系中的注意事项
1、Java中类与类之间不能有多继承
2、一个类可以有多个子类
3、类之间可以有多层继续