文章目录
从小就听说, 面向对象具有三大特征: 封装,继承和多态,现在18岁了, 还是不甚了解, 希望回到这18年的记忆中, 让回忆来告诉你答案
封装(Encapsulation)
首先, 作为三特征之一的封装, 我们需要问自己的记忆几个问题, (模仿郝斌老师)
- 什么是封装
- 为什么需要封装
- 如何封装
(What)什么是封装?
封装, 就是字面意思, 没什么别的意思, 把一个对象封装起来, 使其内部的细节隐藏, 比如我们吃饭的家伙–键盘

(Why)为什么需要封装?
面向对象设计的初衷, 是就是对客观世界对象的模拟, 那么为了更好的维护和使用我们所创造的对象, 将对象内部的细节进行隐藏就是一种较好的选择, 也就是封装, 当然这种封装也只是适当封装, 比如我们的键盘只要用用力也是可以扣下来清洗的或者拆开更换内部零件.
(How)如何封装?
- 对于对象内部的成员变量使用
private关键字修饰 - 提供该成员变量对应的get, set方法, 便于必要时进行修改
下面举例来论证, 封装与不封装的效果差异:
假设你要去找机器人Tony老师剪头发, 但是剪多少厘米这种事情, 被别人随便修改了, 就会造成难以见人的后果
class Tony {
int cutLength;
}
public class HairCut {
public static void main(String[] args) {
Tony teacherTony = new Tony();
teacherTony.cutLength = 1;
System.out.println("Tony老师将剪去你" + teacherTony.cutLength + "厘米的头发!");
teacherTony.cutLength = 7;
System.out.println("Tony老师将剪去你" + teacherTony.cutLength + "厘米的头发!!!!!");
System.out.println("恭喜, 你凸兀了!!!");
}
}
但是经过封装之后, 我们就可以对Tony老师这个对象进行适当的控制
class Tony {
private int cutLength;
public int getCutLength() {
return cutLength;
}
public void setCutLength(int cutLength) {
if (cutLength > 0 && cutLength < 3) {
this.cutLength = cutLength;
} else {
System.out.println("差评, 退卡警告~~~~~");
}
}
}
public class HairCut {
public static void main(String[] args) {
Tony teacherTony = new Tony();
teacherTony.setCutLength(7);
System.out.println("Tony老师将剪去你" + teacherTony.getCutLength() + "厘米的头发!");
}
}
(Caution)封装需要注意什么
对象内部的get, set方法不可以使用static修饰 (废话~~)
总结
适当的封装可以隐藏不必要的细节, 减少对象之间的耦合, 且并不影响修改.
继承(Inheritance)
为什么需要继承?
减少重复的程序代码
这里以<>中Animal举例, 动物具有eat的动作, 猫和狗同属于Animal的范畴, 所以自然也拥有eat的能力. 那么在设计对象的过程中, 我们可以用Animal作为猫狗的共同父类, 所以可以称猫狗与动物是一种一般到特殊的关系, 在面向对象里翻译成继承
下面是代码举例
class Animal {
public void eat() {
}
public void sleep() {
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗狗偶类");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("mimi");
}
}
注意的点
- java中只支持单继承, 但是java可以实现间接继承, 比如泰迪集成狗, 狗继承动物, 则泰迪也继承了动物的特征
- 父类中的构造方法和被
private修饰的内容, 无法被继承(所以protect欢迎您) - java中的类默认继承
Object类中所有特征
多态(Polymorphism)
什么是多态?
同一行为具有多个不同表现形式或形态的能力
说人话就是, meizi穿JK就是妹子, 但是小伙子穿就是女装大佬, 比如以上面小狗的例子
class Animal {
public void eat() {
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗狗偶类");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("mimi");
}
}
public class TestAnimal {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
dog.eat();
cat.eat();
}
}
其中Animal cat = new Cat();都是父类型引用指向了子类型对象,都属于向上转型(Upcasting),或者叫做自动类型转换
总结
多态的实现, 离不开继承, 方法覆盖, 父类型引用指向子类型对象这三个条件.
本文详细介绍了面向对象编程的三大特性:封装、继承和多态。封装通过隐藏对象细节,提高代码维护性和安全性;继承允许子类继承父类属性和方法,减少代码重复;多态则表现为同一行为的不同形态,增强代码灵活性。文章通过实例解释了这些概念,并强调了它们在实际编程中的应用和注意事项。
2678

被折叠的 条评论
为什么被折叠?



