目录
宝子们,今天咱来唠唠 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()); } }
在这个例子里,balance
被 private
修饰,外界无法直接访问和修改它,只能通过 deposit
、withdraw
和 getBalance
这些方法来间接操作,这就是封装的体现,是不是很巧妙?
二、继承:代码复用的神器
(一)继承的好处
继承就像是家族遗传,子类可以继承父类的属性和方法,这样就不用重复写很多代码啦。比如说,你有一个 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(); } }
宝子们看,Dog
和 Cat
类继承了 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); } }
在这个例子里,makeAnimalSound
方法的参数是 Animal
类型,但我们可以传入 Dog
或 Cat
的对象,根据对象的实际类型,会执行不同的行为,这就是多态的神奇之处。
宝子们,封装、继承和多态是 Java 面向对象编程的精髓所在,掌握了它们,你就能写出更加优雅、高效、易维护的代码。刚开始可能会觉得有点绕,但多写多练,你一定会爱上这三个编程魔法的!如果有啥不明白的地方,随时回来看看这篇文章,或者在评论区问我哦。