面向对象编程:类、对象、继承与多态

简介: 面向对象编程:类、对象、继承与多态

面向对象编程(OOP)是什么?


想象你正在设计一个动物园模型,每个动物都有自己的特征和行为。面向对象编程就像这样,它是一种编程方式,让你可以把现实世界的事物(如动物)转换成计算机可以理解的“对象”。每个对象都有自己的属性(特征)和方法(行为),这样程序就能模拟真实世界的各种交互。


类与对象


首先,我们要理解“类”和“对象”的概念。类就好比制作积木的模具,它定义了一组通用特征(属性)和能力(方法)。比如,“动物类”可能有颜色、年龄这样的属性,以及吃东西、睡觉这样的方法。而对象则是从类创建出来的具体实体,就像用模具造出的一个个积木块,每只具体的“狮子”或“熊猫”就是“动物类”的对象。


// 定义一个 Animal 类
public class Animal {
    String color; // 动物的颜色属性
    int age; // 动物的年龄属性
 
    // 吃食物的方法
    public void eat(String food) {
        System.out.println("这只动物正在吃 " + food);
    }
 
    // 睡觉的方法
    public void sleep() {
        System.out.println("这只动物正在睡觉");
    }
}
 
// 创建 Animal 类的对象(例如一只猫)
Animal cat = new Animal();
cat.color = "白色";
cat.age = 3;
cat.eat("鱼"); // 输出: 这只动物正在吃 鱼
cat.sleep(); // 输出: 这只动物正在睡觉


继承

接着,咱们聊聊“继承”。继承就像是设计一个新积木模具时,可以直接在旧模具上添加新的特色。比如,我们已经有了“动物类”,这时可以创建一个“哺乳动物类”,它除了拥有“动物类”的所有特征和行为外,还能增加特有的属性和方法,比如哺乳腺、教育幼崽等。这样一来,新创建的“老虎”或“海豚”对象就自然而然地拥有了这些额外的能力。


// 定义一个 Mammal 类,继承自 Animal 类
public class Mammal extends Animal {
    boolean hasMammaryGlands; // 新增哺乳动物属性
 
    // 实现哺乳动物特有的教育幼崽方法
    public void educateYoung() {
        System.out.println("哺乳动物正在教育幼崽");
    }
}
 
// 创建 Mammal 类的对象(例如一头牛)
Mammal cow = new Mammal();
cow.color = "棕色";
cow.age = 5;
cow.hasMammaryGlands = true;
cow.educateYoung(); // 输出: 哺乳动物正在教育幼崽
cow.eat("草"); // 输出: 这只动物正在吃 草


多态


多态就像同一个操作可以适用于不同种类的对象,产生不同的效果。比如,所有的动物都会“叫唤”,但是“鸟”会飞鸣,“狗”会汪汪叫,“猫”会喵喵叫。在面向对象编程中,尽管它们都实现了“叫声”这个方法,但具体的行为却是各自特有的。这就是多态,即同一个接口(方法名),不同对象有不同的实现。

 // 定义一个 Animal 接口,声明 makeSound 方法
interface AnimalSound {
    void makeSound();
}
 
// 定义 Dog 类,实现 AnimalSound 接口
public class Dog implements AnimalSound {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪!");
    }
}
 
// 定义 Cat 类,同样实现 AnimalSound 接口
public class Cat implements AnimalSound {
    @Override
    public void makeSound() {
        System.out.println("喵喵喵!");
    }
 
    // Dog 和 Cat 类都有各自的 makeSound 方法实现
    public static void main(String[] args) {
        AnimalSound doggy = new Dog();
        AnimalSound kitty = new Cat();
 
        doggy.makeSound(); // 输出: 汪汪汪!
        kitty.makeSound(); // 输出: 喵喵喵!
    }
}


抽象类与接口


抽象类就像是半成品的积木模具,它本身不能用来制造完整的积木块,但它包含了子类应该具备的一些基本要素。比如,“飞行生物抽象类”可能定义了“翅膀”、“飞翔”这样的属性和方法,但并没有实现飞翔的方法,需要鹦鹉、老鹰这样的具体子类去填充实现。

// 定义一个抽象类 FlyingCreature,其中 fly 方法没有实现
abstract class FlyingCreature {
    abstract void fly();
}
 
// 定义 Eagle 类,继承自 FlyingCreature 抽象类,并实现 fly 方法
public class Eagle extends FlyingCreature {
    @Override
    void fly() {
        System.out.println("雄鹰展翅翱翔天际!");
    }
}
 
// 定义一个 Singer 接口,声明 sing 方法
interface Singer {
    void sing();
}
 
// 定义 HumanSinger 类,实现 Singer 接口
public class HumanSinger implements Singer {
    @Override
    public void sing() {
        System.out.println("人类歌手正在唱歌...");
    }
}

接口则更像是一个约定,它规定了一系列必须实现的方法,但并不给出具体的实现内容。比如“歌唱家接口”可能会要求任何实现了它的类都必须有“唱歌”这个方法,不论你是人类歌手、机器歌手还是虚拟歌手,只要你是个歌唱家,就必须能唱。


总结来说,面向对象编程通过类和对象的概念组织代码,利用继承实现代码复用和层级结构,依靠多态增强了程序的灵活性和适应性,而抽象类和接口则提供了规范化的约束和扩展机制,使得程序更加模块化和易于维护。如同搭积木一般,通过组合、拓展和定制,我们可以构建出丰富多样的程序世界。



目录
相关文章
|
7月前
|
C#
初识继承和多态
初识继承和多态
|
4月前
|
C# 索引
C# 面向对象编程(二)——继承
C# 面向对象编程(二)——继承
45 0
|
7月前
|
存储 设计模式 编译器
【C++】继承和多态常见的问题
【C++】继承和多态常见的问题
|
7月前
|
安全 Java 编译器
继承与多态
继承与多态
|
编译器 程序员 C++
【C++】继承和多态
【C++】继承和多态
442 3
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
113 0
|
编译器 C++
类和对象-继承
类和对象-继承
66 1
类和对象-继承
|
编译器 C++
C++类和对象-继承&多态
C++类和对象-继承&多态
84 0
总结继承和多态的一些问题
本人学习了多态和继承后的一些问题,解答出来并总结,有些是容易搞混的概念。
总结继承和多态的一些问题
|
Java 编译器 程序员
继承和多态
继承和多态