面向对象

对象
对象本质上是一种特殊的数据结构
1 | public class 类名{ |
构造器
1 | public class Student { |
this关键字
this是一个变量,可以用在方法中,用于拿到当前对象
封装
合理隐藏合理暴露
- 使用
关键字(私有,隐藏)修饰成员变量,就只能在本类中被直接访问 - 使用
方法合理暴露
javabean
**实体类的对象只负责数据存取,而对数据的业务处理交给其他类的对象完成,以此实现数据和数据业务处理相分离
static
静态,可以修饰成员变量、成员方法
成员变量按照有无 static 修饰,分为两种
- 静态变量(类变量):有static修饰,属于类,在计算机内只有一份,会被类的全部对象共享
- 实例变量(对象的变量):无static修饰,属于每个对象
静态变量的应用场景
- 如果某个数据只需要一份,且希望能够被共享(访问,修改),则该数据可以定义成静态变量来记住
静态方法的常见应用场景
- 做工具类
静态方法,实例方法访问的相关几点注意事项
- 静态方法中可以直接访问静态成员,不可以直接访问实例成员
- 实例方法中可以直接访问静态成员,也可以直接访问实例成员
- 实例方法中可以出现this关键字,静态方法中不可以出现this关键字
继承
继承是什么?
继承是面向对象当中一种重要的思想,其可以提高代码的复用性,减少重复代码的书写
Java中提供关键字 extends,可以让一个类另一个类建立起父子关系
1 | public class B extends A{ |
子类可以继承什么
子类能继承父类的非私有成员(成员变量,成员方法)
继承后对象的创建
子类可以继承父类的非私有成员
子类的对象是由父类、子类共同完成的,所以子类的对象是完整的
权限修饰符
权限修饰符是用来限制类中的成员(成员变量,成员方法,构造器)能够被访问的范围
- private :只能本类
- 缺省 :本类,同一个包中的类
- protected :本类,同一个包中的类,子孙类中
- public :任意位置
继承的特点
- 单继承 :Java是单继承模式,一个类只能继承一个直接父类
- 多层继承 :Java不支持多继承,但是支持多层继承
- 祖宗类 :Java中所有类都是Object类的子类
- 就近原则 :优先访问自己类中,自己类中没有才会继承父类
方法的重写
当子类觉得父类中的某一个方法不好用,或者无法满足自身的需求,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的该方法,这就是方法的重写
1 |
|
其他注意事项
- 子类重写父类方法时,访问权限必须>=父类的方法权限(public>protected>缺省)
- 重写的方法的返回值类型,必须与被重写方法的返回值一样,或者范围更小
- 私有方法,静态方法不能被重写,如果重写会报错
toString 方法默认返回地址,可更具实际需求重写
子类构造器
子类构造器的特点
- 子类的全部构造器,都会先调用父类的构造器,在执行自己
子类构造器是如何实现调用父类构造器的
- 默认情况下,子类全部构造器的第一行代码都是 super() ,他会调用父类的无参数构造器
- 如果父类没有无参数构造器,则我们必须在子类构造器的第一行手写 super(…) ,去指定调用父类的有参数构造器
this() :兄弟构造器,super() 和 this()必须写在构造器的第一行且不能同时出现
多态
什么是多态
多态是在 继承/实现 情况下的一种现象,表现为:对象多态,行为多态
- 对象和行为编译看左运行看右
- 对于成员变量为编译看左运行也看左
多态的前提 :有继承/实现关系;存在父类引用子类对象,存在方法的重写
多态的好处
- 在多态的形式下,右边的对象是解耦合的,更便于扩展和维护
1 | People p1 = new Teacher(); |
- 在定义方法的时候,使用父类类型的形参,可以接受一切子类对象,扩展性更强,更便捷
局限性
在多态的情况下不能调用子类的独有功能
多态下的类型转换
- 自动类型转换:父类 变量名 = new 子类()
1 | People p = new Teacher(); |
- 强制类型转换:子类 变量名 = (子类)父类变量()
1 | Teacher t = (Teacher)p; |
强制类型转换的一个注意事项
- 存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错
- 运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来
建议强制转换前应该判断对象的真实类型,再进行强制转换
1 | if(a instanceof b){ |
附加内容
1 |
|
- Title: 面向对象
- Author: EaborH
- Created at : 2025-03-15 00:00:00
- Updated at : 2025-03-17 18:12:12
- Link: https://eabor.xyz/2025/03/15/面向对象/
- License: This work is licensed under CC BY-NC-SA 4.0.