在定义类的时候, 如果可以直接修改类中的字段, 那么就可能会出现 age 可以设置为1000这种不合理的情况.
而封装, 就可以将类的某些信息隐藏在类内部, 不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问, 从而可以限制对信息的不合理访问和修改.
封装的特点:
- 把字段(成员变量)和实现细节隐藏起来, 不允许外部直接访问, 方便修改和实现.
- 将规定的方法暴露出来, 外部只能通过这些方法去安全的访问和操作成员变量.
实现封装的方式:
通过访问控制符 private 将成员变量私有化, 只能在该类中访问, 同时创建 getter/setter 方法, 并将其暴露出去用于对成员变量的读写, 在 getter/setter 方法中加入控制语句, 对操作的合法性经行判断.
- private 在当前类中可以访问
- default(缺省) 在当前包内和类中可以访问
- protected 在当前包内和类中和它的子类中可访问
- public 公众的访问权限, 谁都能访问
继承是面向对象最显著的一个特性. 继承是从已有的类中派生出新的类, 新的类能吸收已有类的数据属性和行为, 并能扩展新的能力. 继承使得复用以前的代码非常容易, 能够大大缩短开发周期.
Java 不支持多继承, 单继承使 Java 的继承关系很简单, 一个类只能有一个父类, 易于管理程序, 不过一个类可以实现多个接口, 从而克服单继承的缺点.
子类是不能继承父类的构造器的, 它只是调用(隐式或显式). 如果父类的构造器带有参数, 则必须在子类的构造器中显式的通过 super 关键字调用父类的构造器并配以适当的参数列表. 如果父类构造器没有参数, 则在子类的构造器中不需要使用 super 关键字调用父类构造器, 系统会自动调用父类的无参构造器.
不同类的对象对同一消息做出不同的响应, 就是多态. 比如上课铃响了, 老师去授课, 而学生则坐好听讲.
多态的作用简单讲就是解耦, 多态是设计模式的基础, 不能说所有的设计模式都用到了多态, 但23种中的很大一部分, 都是基于多态的.
多态存在的三个条件:
- 有继承关系
- 子类重写父类方法
有三种类型的方法无法表现出多态特性的(因为不能被重写):
- static 修饰的方法, 因为被 static 修饰的方法是属于类的, 而不是属于实例的.
- final 修饰的方法, 因为被 final 修饰的方法无法被子类重写.
- private 和 protected 修饰的方法, 前者是因为被 private 修饰的方法对子类不可见, 后者因为尽管 protected 修饰的方法对子类可见, 也可被子类重写, 但不能被外部引用, 所以也无法体现多态的特性.
- 父类引用指向子类的对象
多态的分类:
原文:https://www.cnblogs.com/lk13227/p/13184064.html