OOP面向对象以及主要特征

目录

1. 封装(Encapsulation)

2. 继承(Inheritance)

3. 多态(Polymorphism)


面向对象编程(OOP)是一种编程范式,它通过将程序结构化为对象来设计和构建软件。这种方法强调对象的使用和组织,以实现代码的重用、可维护性和灵活性。OOP的主要特征包括:

1. 封装(Encapsulation)

定义: 封装是将数据(属性)和操作这些数据的方法(函数)捆绑在一起,并通过访问修饰符控制对数据的访问。封装的核心目的是隐藏对象的内部实现细节,只暴露必要的接口,从而保护数据的完整性。

特征

  • 数据隐藏:通过将数据设为 privateprotected,限制外部直接访问,必须通过公共的方法访问和修改这些数据。
  • 接口暴露:提供公共的方法(getter 和 setter)来操作和访问数据。这样可以在保证数据安全的同时,让外部使用对象的功能。

示例

public class Person {
    // 私有属性
    private String name;
    private int age;

    // 公共构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 公共 getter 方法
    public String getName() {
        return name;
    }

    // 公共 setter 方法
    public void setName(String name) {
        this.name = name;
    }

    // 公共 getter 方法
    public int getAge() {
        return age;
    }

    // 公共 setter 方法
    public void setAge(int age) {
        if (age > 0) { // 检查年龄的有效性
            this.age = age;
        }
    }
}

注意点

  • 选择合适的访问修饰符:使用 private 保护数据,使用 publicprotected 方法提供必要的接口。
  • 保持接口的简单性:公开的方法应该尽量简洁,避免暴露过多内部实现细节。
  • 数据验证:在 setter 方法中进行数据验证,确保数据的有效性和一致性。
2. 继承(Inheritance)

定义: 继承是指一个类(子类)从另一个类(父类)继承属性和方法。子类能够复用父类的代码,同时可以添加新的功能或重写父类的方法以实现自己的特定行为。

特征

  • 代码重用:子类可以重用父类的代码,避免重复编写相同的功能。
  • 功能扩展:子类可以增加新的属性和方法,扩展父类的功能。
  • 方法重写:子类可以重写父类的方法,以提供更具体的实现。

示例

// 父类
public class Animal {
    public void eat() {
        System.out.println("Animal eats food.");
    }
}

// 子类
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog eats bones.");
    }

    public void bark() {
        System.out.println("Dog barks.");
    }
}

注意点

  • 方法重写:确保子类中重写的方法具有与父类方法相同的签名,并使用 @Override 注解来标识重写。
  • 调用父类方法:使用 super 关键字在子类中调用父类的方法,确保子类可以利用父类提供的功能。
  • 构造函数:子类构造函数通常需要调用父类的构造函数,确保父类部分正确初始化。
3. 多态(Polymorphism)

定义: 多态是指不同对象可以通过相同的接口展现不同的行为。多态主要分为两种类型:编译时多态(方法重载)和运行时多态(方法重写)。

特征

  • 编译时多态:通过方法重载实现,同一个方法名用于不同参数列表的方法调用。
  • 运行时多态:通过方法重写实现,父类引用指向子类对象时,通过父类引用调用的方法在运行时决定具体的实现。

示例

// 父类
public class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound.");
    }
}

// 子类
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks.");
    }
}

// 使用类
public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // 父类引用指向子类对象
        myAnimal.makeSound(); // 输出: Dog barks. (运行时多态)
    }
}

注意点

  • 编译时多态:确保重载的方法具有不同的参数列表,以避免混淆。
  • 运行时多态:确保子类正确重写父类的方法,并在程序中使用父类引用来实现运行时多态。
  • 接口与抽象类:利用接口和抽象类来定义通用的行为契约,并由具体实现类来实现这些行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值