Class 类的特征

Class 类的特征,class,oop,Class,Oop,在OOP中,类字段具有几个互斥选项的特征: 公共与私人 最终与可变(?) 静态vs实例 C++中的类或其他常见的OOP语言,如C++和C>< /p> 编程中,面向对象编程是一种释放计算能力的工具。OOP允许程序员定义自己能够使用的变量类型和子集。整数、双精度、字符串等类型都定义为计算机内存中的一组特定位,因此OOP使程序员能够创建具有不同特征的自己类型的可邮寄对象 公共vs私人 这些词指的是对某个类中的变量和方法的访问。公共变量和方法可以在任何地方访问,这意味着它们可以在它所在的类之外调用。另

在OOP中,类字段具有几个互斥选项的特征:

  • 公共与私人
  • 最终与可变(?)
  • 静态vs实例

  • C++中的类或其他常见的OOP语言,如C++和C>< /p> <>编程中,面向对象编程是一种释放计算能力的工具。OOP允许程序员定义自己能够使用的变量类型和子集。整数、双精度、字符串等类型都定义为计算机内存中的一组特定位,因此OOP使程序员能够创建具有不同特征的自己类型的可邮寄对象

    公共vs私人

    这些词指的是对某个类中的变量和方法的访问。公共变量和方法可以在任何地方访问,这意味着它们可以在它所在的类之外调用。另一方面,私有方法和变量只能在它们存在的类中调用

    例如:

    public class Vehicle{
    
            private int milesPerGallon;
    
            public int getMPG{
    
                    return this.milesPerGallon;
            }
    }
    
    Vehicle car1 = new Vehicle();
    
    public class Vehicle{
    
            private double milesPerGallon;
            public static int numberOfVehicles;
    }
    
    Vehicle car1 = new Vehicle();
    Vehicle car2 = new Vehicle();
    
    在本例中,变量
    milesPerGallon
    是私有的,而返回此值的访问器方法(
    getMPG()
    )是公共的。因此,为了获得
    car1
    对象的每加仑英里数,编程无法调用
    car1.milesPerGallon
    。相反,他们必须调用
    car1.getMPG()
    ,因为该方法是公共的

    使用私有变量似乎违反直觉,但私有类成员是管理复杂性的一种方法。如果所有成员都是公共成员,那么代码中的bug和问题就可以链接到这些公共成员中的任何一个。很难将问题追溯到公众成员,因为他们可以在任何地方被呼叫。如果pri出了什么事

    相比之下,私有成员只能从同一个类内部访问,因此如果出现问题,通常只有一个源文件可以查看。如果您的项目中有一百万行代码,但您的类很小,那么这可以将您的bug跟踪工作减少1000倍

    -

    最终版与可变版

    这两个概念指的是类中变量的可塑性。如果一个成员是
    final
    ,这意味着它不能在以后的程序中更改。但是如果没有
    final
    关键字,那么变量可以随时更改。例如,您正在编写一个收银机类

    public class Register{
    
            private final double valueOfPenny = .01;
            private final double valueOfNickel = .05;
            ect...
    
            private int numberOfPennies;
            private int numberOfNickels;
            ect...
    }
    
    Register
    类中,您显然需要知道便士、镍币、一角硬币等的价值。但在整个程序中,这些值将保持不变。因此,我们可以将每枚硬币的值设置为一个
    最终的
    变量,这样它就不会意外地发生变化。另一方面,寄存器中每枚硬币的数量可能会在整个程序中发生变化,因此我们无法将这些变量设置为final

    静态vs实例

    实例变量意味着每个对象都有自己的实例变量副本。记住这一点的一个简单方法是认为变量的每个实例化都有一个类中实例变量的副本。默认情况下,类的所有变量都是实例变量

    另一方面,静态变量只属于整个类一次。不管类已经实例化了多少次,静态变量仍然只属于整个类

    例如:

    public class Vehicle{
    
            private int milesPerGallon;
    
            public int getMPG{
    
                    return this.milesPerGallon;
            }
    }
    
    Vehicle car1 = new Vehicle();
    
    public class Vehicle{
    
            private double milesPerGallon;
            public static int numberOfVehicles;
    }
    
    Vehicle car1 = new Vehicle();
    Vehicle car2 = new Vehicle();
    
    car1
    car2
    都有一个名为milesPerGallon的变量。这是有意义的,因为
    车辆
    类的不同实例将具有不同的MPG值。但是,变量
    numberOfVehicles
    是静态的,因为它只作为有多少辆车的计数器。并非每辆车都需要知道此信息,因为
    car1
    car2
    知道有2辆车是毫无意义的。只有类必须知道此变量的值

    构造函数

    你问我是否有关于OOP的其他重要信息,我觉得构造函数是最重要的。构造函数是一种方法,每当程序员复制一个类时,就会调用它。换句话说,每当程序员进行调用并实例化一个类时,构造函数是第一个也是唯一一个被调用的方法。在Java中,构造函数是必需的,并且构造函数的名称与类的名称相同。如果您没有为Java提供构造函数,那么它将为您生成一个空构造函数。但是构造函数的功能非常有用,应该经常使用。让我们回到
    车辆
    示例。假设你想制造一辆有特定制造商和制造年份的汽车。如上所述,您可以将这两条信息保存为私有实例变量。但是每次创建
    车辆
    对象时,您都希望立即设置这两个变量。(即,您希望构造对象)

    通过使用构造函数,您可以在创建对象时设置它们的属性


    如果您对这些概念/代码或任何其他OOP概念有任何疑问,请告知我

    您的问题过于宽泛,因为它与语言无关。例如,Java有一个
    volatile
    分类器,它基本上表示一个类的属性可以由多个线程操作;然而,JavaScript是一种异步非多线程语言,并且缺乏这种特性。如果列表只能用volatile扩展,那么问题真的那么广泛吗?您对“only”的使用是有限的。我们甚至还没有触及struc的表面