Java 面向对象编程的三大法宝:封装、继承与多态

简介: 本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。

 目录

一、封装:数据的保护罩

(一)为啥要封装

(二)代码示例

二、继承:代码复用的神器

(一)继承的好处

(二)代码示例

三、多态:灵活多变的编程技巧

(一)多态的魅力

(二)代码示例


宝子们,今天咱来唠唠 Java 中面向对象编程里超级重要的三个概念:封装、继承和多态。这仨就像是编程世界里的魔法咒语,掌握了它们,你的代码就能变得更加灵活、可维护和强大。

一、封装:数据的保护罩

(一)为啥要封装

想象一下,你有一个装满宝贝(数据)的盒子,你肯定不希望别人随便乱动里面的东西,对吧?封装就是干这个事儿的。它把数据和操作这些数据的方法包在一起,只对外暴露一些必要的接口,这样就能保证数据的安全性和完整性。比如说,你有一个代表银行账户的类,账户余额这个数据肯定不能让随便谁都能修改,封装就能帮你控制对余额的访问。

(二)代码示例

class BankAccount {
    // 账户余额,用 private 修饰,这就是把它藏起来,不让外面随便访问
    private double balance;
    // 存款方法,这是对外提供的操作余额的接口
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("成功存入 " + amount + ",当前余额为 " + balance);
        } else {
            System.out.println("存款金额必须大于 0");
        }
    }
    // 取款方法,也是接口之一
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("成功取出 " + amount + ",当前余额为 " + balance);
        } else {
            System.out.println("余额不足或取款金额不正确");
        }
    }
    // 查看余额的方法,这个可以让外界获取余额信息,但不能修改
    public double getBalance() {
        return balance;
    }
}
public class EncapsulationExample {
    public static void main(String[] args) {
        BankAccount myAccount = new BankAccount();
        myAccount.deposit(1000);
        myAccount.withdraw(500);
        // 只能通过 get 方法获取余额,不能直接修改 balance
        System.out.println("当前余额:" + myAccount.getBalance());
    }
}

image.gif

在这个例子里,balanceprivate 修饰,外界无法直接访问和修改它,只能通过 depositwithdrawgetBalance 这些方法来间接操作,这就是封装的体现,是不是很巧妙?

二、继承:代码复用的神器

(一)继承的好处

继承就像是家族遗传,子类可以继承父类的属性和方法,这样就不用重复写很多代码啦。比如说,你有一个 Animal 类,它有一些通用的属性和行为,像名字、年龄和吃东西的方法。然后你又有 Dog 类和 Cat 类,它们都是动物,就可以继承 Animal 类,不用再重新定义那些通用的东西,只需要专注于自己特有的属性和行为,比如狗会摇尾巴,猫会抓老鼠。

(二)代码示例

// 父类 Animal
class Animal {
    private String name;
    private int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 动物吃东西的方法
    public void eat() {
        System.out.println(name + " 正在吃东西");
    }
    // 这里是 get 和 set 方法,用于访问和修改私有属性
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
// 子类 Dog,继承自 Animal
class Dog extends Animal {
    // 狗特有的行为,摇尾巴
    public void wagTail() {
        System.out.println(getName() + " 正在摇尾巴");
    }
    public Dog(String name, int age) {
        // 调用父类的构造方法初始化父类的属性
        super(name, age);
    }
}
// 子类 Cat,也继承自 Animal
class Cat extends Animal {
    // 猫特有的行为,抓老鼠
    public void catchMouse() {
        System.out.println(getName() + " 正在抓老鼠");
    }
    public Cat(String name, int age) {
        super(name, age);
    }
}
public class InheritanceExample {
    public static void main(String[] args) {
        Dog myDog = new Dog("旺财", 3);
        myDog.eat();
        myDog.wagTail();
        Cat myCat = new Cat("咪咪", 2);
        myCat.eat();
        myCat.catchMouse();
    }
}

image.gif

宝子们看,DogCat 类继承了 Animal 类,复用了 Animal 类的属性和方法,同时又有自己独特的行为,这样代码是不是简洁多了?

三、多态:灵活多变的编程技巧

(一)多态的魅力

多态就像是孙悟空的七十二变,同一个行为,不同的对象可以有不同的表现形式。比如说,动物都有叫的行为,但狗叫是 “汪汪”,猫叫是 “喵喵”。通过多态,我们可以用一个父类的引用指向不同的子类对象,然后调用相同的方法,却能得到不同的结果,这样代码就更加灵活和可扩展啦。

(二)代码示例

// 还是之前的 Animal、Dog 和 Cat 类
// 定义一个方法,参数是 Animal 类型,这样就可以传入 Animal 的子类对象
public static void makeAnimalSound(Animal animal) {
    animal.eat();
    // 通过 instanceof 关键字判断对象的实际类型,然后调用相应的特有方法
    if (animal instanceof Dog) {
        ((Dog) animal).wagTail();
    } else if (animal instanceof Cat) {
        ((Cat) animal).catchMouse();
    }
}
public class PolymorphismExample {
    public static void main(String[] args) {
        Dog myDog = new Dog("大黄", 4);
        Cat myCat = new Cat("小花", 3);
        makeAnimalSound(myDog);
        makeAnimalSound(myCat);
    }
}

image.gif

在这个例子里,makeAnimalSound 方法的参数是 Animal 类型,但我们可以传入 DogCat 的对象,根据对象的实际类型,会执行不同的行为,这就是多态的神奇之处。

宝子们,封装、继承和多态是 Java 面向对象编程的精髓所在,掌握了它们,你就能写出更加优雅、高效、易维护的代码。刚开始可能会觉得有点绕,但多写多练,你一定会爱上这三个编程魔法的!如果有啥不明白的地方,随时回来看看这篇文章,或者在评论区问我哦。

目录
打赏
0
14
15
1
121
分享
相关文章
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
165 0
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
297 3
|
9月前
|
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
761 60
|
9月前
|
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
279 63
|
1月前
|
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
78 0
Java 无锁方式实现高性能线程实战操作指南
本文深入探讨了现代高并发Java应用中单例模式的实现方式,分析了传统单例(如DCL)的局限性,并提出了多种无锁实现方案。包括基于ThreadLocal的延迟初始化、VarHandle原子操作、Record不可变对象、响应式编程(Reactor)以及CDI依赖注入等实现方式。每种方案均附有代码示例及适用场景,同时通过JMH性能测试对比各实现的优劣。最后,结合实际案例设计了一个高性能配置中心,展示了无锁单例在实际开发中的应用。总结中提出根据场景选择合适的实现方式,并遵循现代单例设计原则以优化性能和安全性。文中还提供了代码获取链接,便于读者实践与学习。
67 0
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
146 0
从阻塞到畅通:Java虚拟线程开启并发新纪元
从阻塞到畅通:Java虚拟线程开启并发新纪元
248 83
Java虚拟线程:轻量级并发的革命性突破
Java虚拟线程:轻量级并发的革命性突破
178 83

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问