面向对象特征:封装、多态、继承、抽象
一、访问修饰符 和 封装(private修饰下的set()和get()方法)
1.访问修饰符:public、protected、default、private public: 公开的、公共的 protected: 受保护的 default: 默认的 private: 私有的 1)访问修饰符可以修饰: 类、成员方法、成员变量 2)访问范围(从大到小) public > protected > default > private public:所有类中可用 protected:用于父子类关系中(可以不同包) default: 本包中(不管有无父子类关系) private: 本类中(出了本类,将不可使用) 3)使用情况 public:想要所有类所共享的内容 protected:只想供子类使用的内容 default: 不用,一般练习使用 private: 最重要!! 最常用!! 基本所有实体类中的成员变量都会使用
2.面向对象特征之封装 a.使用private访问修饰符修饰成员变量 private int a; b.给外部提供一对可以访问该成员变量的方法 get() - 获取成员变量 public int getA(){ return a; } set() - 设置成员变量 public void setA(int a){ this.a=a; } c.封装的好处: 通过方法的方式去访问成员变量,保证了代码的安全性. 把代码用方法进行封装,提高了代码的复用性.
二、static关键词:静态的 1.作用: 使用static修饰后的都是属于该类所有对象共享的 2.修饰成员变量 - 静态变量(类变量) 格式: 访问修饰符 static 数据类型 变量名 = 初始化值 使用: 类名.变量名 局部变量: 存在方法中 成员变量: 存在类中 实例变量: 没有添加static关键词, 属于对象的, 使用方式: 对象名.变量名 个数: 随着对象决定 静态变量: 添加static关键词, 属于类, 使用方式: 类名.变量名 个数: 有且只有一个
3.修饰成员方法 - 静态方法(类方法) 格式: 访问修饰符 static 返回值类型 方法名(参数) 使用: 类名.方法名 实例方法: 没有static修饰的方法 属于对象的 使用方式: 对象名.方法名 个数: 随着对象决定 静态方法: 有static修饰的方法 属于类的 使用方式: 类名.方法名 个数: 有且只有一个 注意: a.在实例方法中可以直接使用静态的变量和方法 b.在静态方法中,不可以直接使用实例的变量和方法,因为实例的变量和方法属于对象的,而静态修饰的都加载在对象之前. 4.修饰代码块 - 静态代码块 实例代码块:没有static修饰,必须放在类中,跟对象初始化一起加载. 特点: a.属于对象的 b.每次调用构造方法进行初始化对象时,实例代码块都会自动触发一次,并且都执行在构造方法之前. 作用: a.提取所有构造方法中重复的代码 b.给成员变量初始化 静态代码块:带有static修饰,必须放在类中,和类一起加载执行. 特点: 每次加载类(使用类)的时候都会先执行静态代码块一次. 使用类的情况: a.新建对象(new) b.使用静态变量 c.使用静态方法 静态代码块是自动触发的,只要程序启动,静态代码块会随之执行. 静态代码块可以放在类中任意位置,也可以有多个代码块,但是都是统一加载,并且只加载一次. 作用: 在启动程序之前可以做资源的初始化,一般用于初始化静态资源(图片,文件...) 5.静态的内存管理 所有的静态成员会随着类信息一起加载到方法区中(静态区域) 所有的静态成员属于类本身的,不属于对象 静态成员进入到内存后,会附上默认值 静态的成员变量一定是优于对象之前所存在 ***** 6.注意事项: a.static修饰的成员变量的访问范围,只跟访问修饰符相关
三、面向对象特征之继承 1.前提: 父类(基类/超类): 人类: 成员变量: 姓名,性别 成员方法: 吃饭,睡觉 子类: extends 父类 学生类: 成员变量: 学号 成员方法: 学习 老师类: 成员变量: 工号,工资 成员方法: 讲课 工人类: 成员变量: 工号,工资 成员方法: 打工 2.概念 子类继承父类,就会继承父类中的所有成员变量和成员方法. 子类可以直接访问父类中 非私有的成员变量和方法. 3.语法格式 子类 extends 父类 4.特点: a.Java中只支持单继承,不支持多继承,但是支持多层继承 b.一个类可以有多个子类 c.一个子类,有且只能有一个父类 5.子类不能继承的内容(重要) a.子类不能继承父类的构造方法,因为子类有自己的构造方法. b.子类可以继承父类中私有的成员,但是不能直接访问,可以通过get()/set()访问或修改. 6.优缺点: 优点: 提高了代码的复用性 缺点: 继承会让类与类之间产生关联关系,类与类之间的耦合度增强了. 当父类中的内容修改时,子类必须随着一起改变,削弱了子类的独立性. 7.继承中成员访问的特点 1)成员变量 a.父类和子类的成员变量名不重名 父子类出现不重名的情况可以直接使用,对变量没有任何影响. b.父类和子类的成员变量名重名 存在问题: 只能使用其中一个变量值, 当在获取值时,会先查看子类中是否存在该变量, 如果存在则直接使用如果不能存在,则往父类中寻找. 2)成员方法 a.父类和子类的成员方法名不重名 父子类出现不重名的情况可以直接使用,对变量没有任何影响. b.父类和子类的成员方法名重名 会造成方法重写 3)构造方法 a.子类构造方法的第一行都会默认添加super(),调用父类的无参构造方法,在执行自己的构造方法. b.手动添加super(参数),将不再默认添加无参构造方法,建议手动添加父类无参构造方法,方便子类使用. 8.super关键词: 表示父类对象 1)修饰成员变量 格式: super.变量名 使用情况: 想要获取父类中的成员变量时 2)修饰成员方法 格式: super.方法名 使用情况: 少用 3)修饰构造方法 9.方法重写 1)概念 前提:必须存在父子类关系 子类和父类中有相同的方法,方法的方法名、参数、返回值都必须一致,会造成方法的重写。 注意事项: a.子类访问修饰符必须大于等于父类访问修饰符 b.静态方法不能被重写,如果子类也有相同的方法名,并不是重写父类中的方法 c.私有方法不能被重写(父类私有成员只能被继承不能被使用) 面试题: 1.方法重写 和 方法重载的区别 方法重载: 前提:必须在同一个类中 相同的方法名,不同的方法参数可以造成方法重载,和返回值无关。
2.父子类关系的执行排列:
父类静态代码块 -> 子类静态代码块 -> 父类代码块 -> 父类构造 -> 子类代码块 -> 子类构造