对封装、继承、多态三个概念理解

封装、继承、多态

封装、继承、多态其实并不是很难一句话就能说清。

一、封装: 将东西放入盒子

一句话 封装的目的是为了隐藏实现细节,只暴露必要的接口

生活例子: 你家的电视,你只需要按遥控器上的按钮(开、关、调台),不需要打开后盖去拧电线。电视把内部线路全藏起来了,只留几个按钮给你 ------ 这就是封装。

代码示例为:

csharp 复制代码
class Student {
    private int age;
}// 年龄是私有的,只能通过getter和setter方法来访问

public void setAge(int age) {
        this.age = age;
    }
public int getAge() {
        return age;
    }

外面使用时,需要调用setter方法来设置年龄,而不是直接赋值。例如:

ini 复制代码
Student s = new Student();
s.setAge(18);

里面的数据是安全的,外面不能直接访问。只有通过getter和setter方法才能访问。也可以对数据进行校验,例如:

csharp 复制代码
public void setAge(int age) {
        if (age < 0 || age > 150) {
            System.out.println("年龄不对!");
            return;
        }
        this.age = age;
    }

如果输入的年龄不在0-150之间,就会输出"年龄不对!"。

二、继承: 继承盒子里面的东西

一句话: 儿子继承爸爸的东西。

生活例子:你从你生下来就和你爸爸妈妈一样有着一对的眼睛,一头乌黑的头发。等等,不用重新长。不同的你是你可以有与你爸爸不一样的地方。例如可能你比他高,或者你比他轻。你有着他没有的爱好。

代码示例为:

scala 复制代码
// 父类:人
public class Person {
    String name;
    int age;

    void introduce() {
        System.out.println("我叫" + name + ",今年" + age + "岁");
    }
}

// 子类:学生,自动拿到 name、age、introduce()
public class Student extends Person {
    String studentId;   // 学生自己的东西
}

// 子类:老师,同样白拿一份
public class Teacher extends Person {
    double salary;       // 老师自己的东西
}

子类不用写父类中的属性与方法,可以直接继承使用。

进行调用时,直接调用即可。例如:

ini 复制代码
Student s = new Student();
s.introduce();

会输出"我叫张三,今年18岁"。

三、多态: 同样一个拿取动作,出现不同的结果

一句话: 同一个动作,不同的对象,会有不同的结果。

生活例子: 同样是播放按钮,在视频软件中播放的是视频,而在音乐软件中播放的是音乐。

接着上面的代码,代码示例为:

scala 复制代码
public class Student extends Person {
    @Override
    void introduce() {
        System.out.println("我是学生" + name);
    }
}

public class Teacher extends Person {
    @Override
    void introduce() {
        System.out.println("我是老师" + name);
    }
}

然后写一个方法让他跟人打招呼。

scss 复制代码
public static void sayHello(Person p) {
    p.introduce();   // 传进来的是谁,就用谁的介绍方式
}

public static void main(String[] args) {
    Student s = new Student();
    Teacher t = new Teacher();
    sayHello(s); // 我是学生张三
    sayHello(t); // 我是老师李四
}

都是同样的sayHello方法,但是对象不同,结果也不同。

四、扩展:修饰符

private:私有的,只能在本类中访问。 public:公有的,可以在任何地方访问。 protected:受保护的,可以在本类、子类、同包类中访问。 default:默认的,只能在本类、同包类中访问。

使用原则

  • 成员变量:尽量用 private,提供 getter/setter 封装
  • 工具方法:private
  • 给子类扩展的方法:protected
  • 对外暴露 API:public
  • 仅同包使用:default

五、总结:最直白最不饶弯子

封装:将数据隐藏起来,只暴露必要的接口。

继承:子类继承父类的东西。

多态:同一个动作,不同的对象,产生不同的结果。

相关推荐
code2cat3 小时前
【随笔】LLM裁判如何打分:先写评分标准,再用人工案例校准
java·人工智能·llm·agent·评估·langsmith
SL_staff3 小时前
计息规则不再等IT:JVS-Rules函数计算器在金融计息场景的技术实践
java·git·全栈
古法老登瞎折腾3 小时前
大数据智能运维实战(二):准备一个可复现的运维实验环境
java·大数据·运维·spring ai·mcp
爱读书的小胖3 小时前
80. 删除有序数组中的重复项 II
java·数据结构·算法
jyOverQ3 小时前
从零开始学 RocketMQ(一):基础概念、环境搭建与简单消息收发【保姆级教程】
java·rocketmq·java-rocketmq
用户7771298509123 小时前
封装、继承、多态
java
Ysx3 小时前
比"本地全绿"更可怕的坑:"交付了"不等于"生效了"
java·后端
2301_786756603 小时前
2026 JCR 秋季数据重载解读:影响因子为什么会变?附期刊影响力数据批量追踪方案
java·服务器·前端
用户7771298509123 小时前
代码的命名规范有哪些?
java