回答了我自己的问题:我无法在班级中声明任何变量,就像在我班级中那样。它们必须在函数中声明,在本例中为 initialize();
我有一个名为“寿司”的课程
package {
public class Sushi {
private var cName: String; // This is the name of the sushi.
private var cBio: String; // This is the description of the sushi.
private var cWeight: Number; // This is the weight modifier of the sushi (please keep it between 0.1 and 2.0).
//public var cSprite: MovieClip; // This is the sushi's graphic.
private var cResist: Number; // This is the sushi's resistance modifier.
public function setName(n:String): void {
cName = n;
}
public function setBio(b:String): void {
cBio = b;
}
public function setWeight(w:Number): void {
cWeight = w;
}
public function setResist(r:Number): void {
cResist = r;
}
public function getName(): String {
return cName;
}
public function setCurrentChar(): void {
MainClass.curChar = this;
}
}
}
......和一个主要课程。我的主类创建了两个Sushi对象:test1和test2。
private var test1 = new Sushi();
test1.setName("Test1");
private var test2 = new Sushi();
test2.setName("Test2");
每当我运行它时,我会得到错误“访问未定义属性test1”和test2相同的错误。我做错了什么,如何从错误中吸取教训?
答案 0 :(得分:0)
因为您将成员声明为private
,所以在课程范围之外无法访问它们。
在类中有访问修饰符,它们控制范围。例如:
internal
- 对同一个包内的引用可见private
- 对同一类中的引用可见protected
- 对同一类和派生类中的引用可见public
- 随处可见static
- 指定属性属于类,而不是类在您的示例Sushi
类中,因为您将这些成员声明为私有,所以只有Sushi
类才能看到它们。
package {
public class Sushi {
private var cName:String;
public function setName(n:String): void {
cName = n;
}
}
}
但是,您可以将该成员声明为public:
package {
public class Sushi {
public var cName:String;
}
}
当声明为公开时,您现在可以像以下一样访问它们:
var sushi:Sushi = new Sushi();
suschi.name = "Kappa Maki";
您的解决方法是被视为属性的属性,其中为变量定义了getter和setter。
例如,这里_price
只是Sushi类可以访问的属性;但是,它公开了两种公共方法来获取或设定价格值:
package {
public class Sushi {
private var _price:Number;
public function get price():Number {
return _price;
}
public function set price(value:Number):void {
_price = value;
}
}
}
这种面向对象的编程概念称为封装,有助于隐藏类的内部复杂性。
通过删除setter,您可以创建只读属性:
package {
public class Sushi {
private var _price:Number = 7.99;
public function get price():Number {
return _price;
}
}
}
现在,您可以检索获取价格;但是,你无法设置它。
var sushi:Sushi = new Sushi();
trace("price is: $" + sushi.price); // traces: price is: $7.99
如果尝试设置属性,编译器将抛出错误:
var sushi:Sushi = new Sushi();
sushi.price = 1.99; // throws error: Property price is read-only.
根据初始化,您可以将其默认值内联设置为其定义,如:
package {
public class Sushi {
public var cName:String = "Kappa Maki";
}
}
或者,您可以在声明new
实例时执行的类构造函数中设置其初始值:
package {
public class Sushi {
public var cName:String;
public function Sushi {
cName = "Kappa Maki";
}
}
}