一个阶级的特征

时间:2016-05-02 02:28:58

标签: class oop

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

  1. public vs private
  2. final vs changeable(?)
  3. 静态vs实例
  4. Java或其他常见OOP语言中是否存在类的其他重要特征,例如C ++和C#?

1 个答案:

答案 0 :(得分:0)

在编程中,面向对象编程是一种释放计算真正力量的工具。 OOP允许程序员定义他们自己的类型和他们能够使用的变量子集。整数,双精度,字符串等类型都被定义为计算机内存中的某个位集,因此OOP为程序员提供了创建自己类型的可邮寄对象的能力。

公共与私人

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

<强>例如

public class Vehicle{

        private int milesPerGallon;

        public int getMPG{

                return this.milesPerGallon;
        }
}

Vehicle car1 = new Vehicle();

在此示例中,变量milesPerGallon是私有的,而返回此值的访问器方法(getMPG())是公共的。因此,为了获得car1对象的每加仑英里数,编程无法调用car1.milesPerGallon。相反,他们必须调用car1.getMPG(),因为该方法是公开的。

使用私有变量似乎违反直觉,但私有类成员是管理复杂性的一种方法。如果所有成员都是公开的,那么代码中的错误和问题可以链接到这些公共成员中的任何一个。由于可以在任何地方调用问题,因此很难向公众成员追溯问题。如果某事发生在pri

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

- tdammers

最终与可更改

这两个概念指的是一个类中变量的可塑性。如果成员是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变量,以便在意外情况下不会意外更改。另一方面,寄存器中每个硬币的数量可能会在整个程序中发生变化,因此我们无法制作这些变量final

静态与实例

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

另一方面,静态变量只属于整个类。无论有多少个类的实例化,静态变量仍然只属于整个类。

<强>例如

public class Vehicle{

        private double milesPerGallon;
        public static int numberOfVehicles;
}

Vehicle car1 = new Vehicle();
Vehicle car2 = new Vehicle();

car1car2都有一个名为milesPerGallon的变量。这是有道理的,因为Vehicle类的不同实例将具有不同的MPG值。但是,变量numberOfVehicles是静态的,因为它只作为计数器来计算有多少辆车。每辆车都不需要知道这些信息,因为car1car2知道有2辆车是没有意义的。只有类必须知道此变量的值。

<强> 构造

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

public class Vehicle{

        private makeOfVehicle;
        private yearOfVehicle;


        public Vehicle(String make, int year){ //constructor
                this.makeOfVehicle = make;
                this.yearOfVehicle = year;
        }
}
Vehicle car1 = new Vehicle("Toyota",2005);
Vehicle car2 = new Vehicle("BMW",2002);

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

如果您对这些概念/代码或任何其他OOP概念有任何疑问,请与我们联系