关于ActionScript面向对象编程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 23:46:31
我用的ActionScript面向对象编程语言,为什么不能将一个类中的实例变量赋予另一个类的对象后,直接用这个实例变量调用这个类的方法?代码如下:

package test {
import flash.display.Sprite;

public class Test extends Sprite {
private var str:String;
private var out:Output;

public function Test() {
str = "abcd";
out = new Output();
}
out.printStr(str);
}
}

package test {

public class Output {

public function printStr(s:String) {
trace("The string is " + s);
}
}
}

是不是Output类需要定义s变量,函数里面可以this.s=s;

你这个例子应该报错吧?
package test {
import flash.display.Sprite;

public class Test extends Sprite {
private var str:String;
private var out:Output;

public function Test() { //构造函数
str = "abcd";
out = new Output();
} //构造函数结束
out.printStr(str); //这个是什么?方法?属性?
}
}

补充(基础oop知识):
看来你还在用面向过程的思想来看待面向对象的东西。
所谓oop,就是将一切都看成“对象”。
一个类,要拥有至少一个对外接口,具体的表现,就是拥有自己的方法和属性,也就是指,这个类,可以用来做什么。
一个类的表示,可以简单如下:
类名:
类的私有属性:
构造函数:
拥有的公共方法:
其中,构造函数和公共方法是这个类的对外接口,也就是这个类对外的承诺,一旦确定,不可更改。注意,在as3中,构造函数不能使用private,必须是public,这和java不一样。
个人坚决反对公共属性的存在,推荐使用as3特色的getter/setter来实现公共“属性”。
这样看来,你的代码中的这一句
out.printStr(str);
它既不是类的方法,也不是类的属性,是一个错误的存在。
一个类被实例化的时候,要执行的是这个类的构造函数。
作为swf的绑定类——文档类,你需要将商业逻辑放入构造函数中,或者简介放入一个私有方法中,而构造函数调用这个私有方法,一般这个方法命名为:
private function init():void{};
因此,你需要将代码
o