面向对象编程(OOP)及其三大特性

面向对象编程 (OOP Object Oriented Programming)

OOP 是一种编程范式,它将数据行为组织成对象。

那怎样理解呢?

解答如下:

0.理解数据和行为

在面向对象编程 (OOP) 中,数据和行为是两个基本概念:

  • 数据:对象的属性或状态,描述对象的特征。

  • 行为:对象的方法或操作,描述对象可以执行的动作。

示例1:

考虑一个 Person 类:

数据(属性):

  • name:字符串,表示人的姓名

  • age:整数,表示人的年龄

行为(方法):

  • sayHello():打印一个问候语,例如 "Hello, my name is [name] and I am [age] years old."

如何理解?

  • 数据:这些属性定义了 Person 对象的状态。通过访问这些属性,我们可以了解有关人(姓名和年龄)的信息。

  • 行为:这些方法定义了 Person 对象可以执行的动作。例如,我们可以调用 sayHello() 方法让对象自我介绍。

示例2:

考虑一个 Car 类:

数据(属性):

  • make:字符串,表示汽车的品牌

  • model:字符串,表示汽车的型号

  • year:整数,表示汽车的年份

行为(方法):

  • drive():模拟汽车驾驶

  • park():模拟汽车停车

如何理解?

  • 数据:这些属性定义了 Car 对象的状态。通过访问这些属性,我们可以了解有关汽车(品牌、型号和年份)的信息。

  • 行为:这些方法定义了 Car 对象可以执行的动作。例如,我们可以调用 drive() 方法让汽车行驶,或者调用 park() 方法让汽车停车。

总之,数据描述了对象的状态,而行为描述了对象可以执行的动作。通过理解数据和行为之间的关系,我们可以创建更灵活和可重用的代码。

1 类与对象

1.1 类的定义

类是一个模板,用于创建具有特定属性和行为的对象。要定义一个类,请使用以下语法:

public class ClassName {
    // 类属性
    private int age;
    private String name;

    // 类方法
    public void sayHello() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }
}

 

1.2 对象的创建

要创建类的实例(对象),请使用 new 关键字:

ClassName objectName = new ClassName();

1.3 构造函数

构造函数是一种特殊的方法,用于在创建对象时初始化其状态。构造函数的名称与类名相同,并且在没有返回值类型的情况下被声明:

public ClassName(int age, String name) {
    this.age = age;
    this.name = name;
}

2 继承

2.1 继承的概念

继承允许一个类(子类)从另一个类(父类)继承属性和方法。要创建子类,请使用 extends 关键字:

public class SubClassName extends SuperClassName {
    // 子类特有的属性和方法
}

2.2 方法重写

子类可以重写父类的方法,使用相同的名称和参数列表,但具有不同的实现:

@Override
public void sayHello() {
    super.sayHello(); // 调用父类的方法
    System.out.println("I am a subclass!");
}

3 封装

3.1 封装的概念

封装隐藏了类的内部实现细节,只允许通过公共方法访问数据。Java 中有三种访问修饰符:

  • **private:**只能在类内部访问

  • **protected:**可以在类内部及其子类中访问

  • **public:**可以在任何地方访问

3.2 Getter 和 Setter 方法

Getter 和 Setter 方法允许访问和修改私有属性:

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

4 多态

4.1 多态的概念

多态允许通过父类引用访问子类对象。当调用方法时,将调用子类中的相应方法:

SuperClassName superObject = new SubClassName();
superObject.sayHello(); // 调用 SubClassName 中的 sayHello() 方法

4.2 方法重载

方法重载允许在同一类中定义具有相同名称但参数不同的方法:

public void sayHello(String name) {
    System.out.println("Hello, " + name + "!");
}

public void sayHello(int age) {
    System.out.println("Hello, you are " + age + " years old!");
}

示例代码

public class Person {
    private int age;
    private String name;

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }
}

public class Student extends Person {
    private String school;

    public Student(int age, String name, String school) {
        super(age, name);
        this.school = school;
    }

    @Override
    public void sayHello() {
        super.sayHello();
        System.out.println("I am a student at " + school + ".");
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person(20, "John");
        person.sayHello(); // 输出:Hello, my name is John and I am 20 years old.

        Student student = new Student(22, "Alice", "MIT");
        student.sayHello(); // 输出:Hello, my name is Alice and I am 22 years old.
                              //      I am a student at MIT.
    }
}

 

 结语:以上就是关于oop的基础知识,便于快速掌握oop的三大特性,也比较好理解,可能稍微有点抽象。感谢各位看官的观看,下期见哦,谢谢!

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值