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

相关文章
|
3月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
185 1
|
4月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
82 2
|
4月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
62 2
|
7月前
|
搜索推荐 Java 编译器
【Java探索之旅】多态:重写、动静态绑定
【Java探索之旅】多态:重写、动静态绑定
41 0
|
Java 程序员 C++
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
218 0
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
|
Java 编译器
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(2)
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(2)
163 0
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(2)
|
Java 编译器 数据库
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(1)
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(1)
113 0
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(1)
|
26天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
85 17

热门文章

最新文章