深入对比Java和Python的面向对象编程(OOP)特性

Java是面向对象编程(OOP)语言,Python也是面向对象编程(OOP)语言,其内容包含类、对象、继承、封装、多态。下面我们要对两者的OOP特性进行逐一对比。

深入对比Java和Python的面向对象编程(OOP)特性

1. 类和对象

Java支持面向对象的编程方式,Python也支持面向对象的编程方式,其核心概念包括:

Java:必须先定义类,再创建对象

class Dog {
    String name;  // 成员变量
    int age;
    // 构造函数
    Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 方法
    void bark() {
将变量name的值与字符串" is barking!"进行拼接,然后输出拼接后的结果
    }
}
public class Main {
公共静态无效主函数,使用字符串数组作为参数
创建一个新的对象,该对象是名为Dog的类的实例,实例名为dog1,使用构造函数创建,传入参数"Buddy"和3 。
        dog1.bark();  // 调用方法
    }
}

特点:

Python:类则更灵活

class Dog:
定义一个初始化方法,该方法接收两个参数,分别是name和age 。
        self.name = name  # 实例变量
        self.age = age
    def bark(self):
打印,格式化输出,将self.name和is barking!组合成字符串,输出该字符串 。
# 创建对象
dog1 = Dog("Buddy", 3)
dog1.bark()

特点:

继承Java,要显式声明extends关键字

class Animal {
    void eat() {
系统输出打印,“这种动物进食。”
    }
}
// Dog 继承 Animal
class Dog extends Animal {
    void bark() {
系统输出“狗在叫!”
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 继承自 Animal
        dog.bark(); // Dog 自己的方法
    }
}

特点:

Python:支持多继承

class Animal:
    def eat(self):
打印,“这种动物吃食物。”
class Dog继承Animal ,其中Dog类继承自Animal类 。
    def bark(self):
        print("Dog is barking!")
dog = Dog()
dog.eat()  # 继承的方法
dog.bark() # Dog 自己的方法

特点:

3. 封装(Encapsulation)

封装是指限制类的属性或方法的访问权限,确保数据的安全性。

Java,有private访问修饰符,有protected访问修饰符,还有public访问修饰符。

class Person {
    private String name;  // 私有变量
    private int age;
    // 通过构造函数初始化
定义一个名为Person的构造函数,它有两个参数,一个是字符串类型的name,另一个是整型的age 。
        this.name = name;
        this.age = age;
    }
    // 提供公有方法访问私有变量
    public String getName() {
        return name;
    }
}
public class Main {
    public static void main(String[] args) {
创建一个名为p的对象,该对象属于Person类型,使用参数“Alice”和25进行初始化 。
这是错误的,因为name是私有的,所以不能通过System.out.println(p.name)来访问 。
System.out.println(p.getName()); 这是正确的,是通过方法进行访问的 。
    }
}

特点:

Python:_ 和 __ 伪私有变量

class Person:
    def __init__(self, name, age):
self._name被赋值为name,这是一个受保护变量,按照约定俗成的规则,外部仍然能够对其进行访问。
这是一个私有变量,不能直接访问,它被赋值为age,变量名为__age 。
    def get_name(self):
        return self._name
p = Person("Alice", 25)
打印,p的获取名称的方法的返回值,结果为 "Alice" 。
打印p的年龄,这是错误的,不能直接进行访问。
打印,p的_Person__age属性,这可以进行访问,(Python名字改写)。

特点:

4. 多态(Polymorphism)

多态:不同类的对象可以使用相同的方法(方法重写)。

Java:方法重写

class Animal {
    void makeSound() {
系统输出“动物发出声音。”
    }
}
class Dog extends Animal {
    @Override
    void makeSound() {
系统输出“狗叫。”
    }
}
public class Main {
    public static void main(String[] args) {
创建一个Animal类型的对象myAnimal,将其初始化为一个Dog类型的实例,这是向上转型。
调用Dog的方法,其结果为 "Dog barks." ,具体操作为执行myAnimal.makeSound();
    }
}

特点:

Python:动态类型 + 方法重写

class Animal:
    def make_sound(self):
打印,“动物发出声音。”
class Dog(Animal):
    def make_sound(self):
        print("Dog barks.")
animal = Dog()  # 直接创建 Dog 对象
动物,发出声音  # “狗叫。”

特点:

5. 对比总结

特性

Java

Python

类

class 关键字,变量需声明类型

class 关键字,动态类型

对象

new 关键字创建对象

直接调用类名创建对象

继承

extends 关键字,单继承

直接继承,多继承支持

封装

private/protected/public 修饰符

_变量(约定)__变量(伪私有)

多态

方法重写 (@Override),强类型检查

方法重写,动态类型

Python的确比Java简单不少。各位Java的小伙伴,你弄明白了吗?

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读