📜  为什么Java不是纯粹的面向对象语言

📅  最后修改于: 2020-03-22 13:36:56             🧑  作者: Mango

面向对象的纯语言或面向对象的完整语言是完全面向对象的语言,它支持或具有将程序内部的所有内容都视为对象的功能。它不支持原始数据类型(如int,char,float,bool等)。对于纯面向对象的编程语言,要满足七种素质。他们是:

  1. 封装/数据隐藏
  2. 继承
  3. 多态性
  4. 抽象化
  5. 所有预定义类型都是对象
  6. 所有用户定义的类型都是对象
  7. 对对象执行的所有操作必须仅通过对象处公开的方法进行。

示例:Smalltalk
Java支持属性1、2、3、4和6,但不支持上述属性5和7。Java语言不是纯面向对象的语言,因为它包含以下属性:

  • 原始数据类型。int,long,bool,float,char等作为对象:与Java和C++不同,Smalltalk是一种“纯”的面向对象的编程语言,因为对象值和原始类型值之间没有区别。在Smalltalk中,原始值(例如整数,布尔值和字符)也是对象。
    在Java中,我们将预定义类型作为非对象(原始类型)。
    int a = 5;
    System.out.print(a);
  • static关键字:  当我们将一个类声明为static时,可以在不使用Java对象的情况下使用它。如果我们使用静态函数或静态变量,则不能使用dot(.)或类对象违反面向对象的功能来调用该函数或变量
  • 包装器类:包装器类提供了将原语转换为对象并将对象转换为原语的机制。在Java中,可以使用Integer,Float等代替int,float等。我们可以与对象通信而无需调用它们,例如使用算术运算符。
    String s1 = "ABC" + "A" ;

    即使使用Wrapper类也不能使Java成为纯OOP语言,因为在内部它将使用Unboxing和Autoboxing之类的操作。因此,如果您创建Integer并对其进行任何数学运算,那么Java将仅使用基本类型int。

    public class BoxingExample
    {
        public static void main(String[] args)
        {
                Integer i = new Integer(10);
                Integer j = new Integer(20);
                Integer k = new Integer(i.intValue() + j.intValue());
                System.out.println("输出: "+ k);
        }
    }

在上面的代码中,有两个Java无法作为纯OOP工作的问题:

  1. 创建Integer类时,您使用的是原始类型“ int”,即数字10、20。
  2. 在执行加法操作时,Java使用的是原始类型“ int”。