Flash / Flex / ActionScript/Class/interface
Содержание
Creating Interfaces
<source lang="java">
interface InterfaceName {
// Interface code goes here.
}
interface IMessageSender {
private var _msToSend:Message; // Incorrect.
}
</source>
Extends an interface
<source lang="java">
interface ISender {
public function send():void;
} interface IMessageSender extends ISender {
public function setMessage(msObject:Message):void;
}
</source>
Implement an Interface
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var srcInstance:ShapeContainer = new ShapeContainer(200, 200); var cirA:Circle = new Circle(0, 0, 50); var cirB:Circle = new Circle(0, 0, 400); var sqA:Square = new Square(0, 0, 100); var sqB:Square = new Square(0, 0, 200); var bAdded:Boolean; bAdded = srcInstance.addShape(cirA); trace(bAdded); bAdded = srcInstance.addShape(cirB); trace(bAdded); bAdded = srcInstance.addShape(sqA); trace(bAdded); bAdded = srcInstance.addShape(sqB); trace(bAdded); } }
} interface IShape {
function getDimensions():Object;
} class Circle implements IShape{
private var _nX:Number; private var _nY:Number; private var _nRadius:Number; public function Circle(nX:Number, nY:Number, nRadius:Number) { nX = nX; nY = nY; nRadius = nRadius; } public function getDimensions():Object { return {width: 2* _nRadius, height: 2 * _nRadius}; }
} class Square implements IShape {
private var _nX:Number; private var _nY:Number; private var _nSide:Number; public function Square(nX:Number, nY:Number, nSide:Number) { _nX = nX; nY = nY; nSide = nSide; } public function getDimensions():Object { return {width: _nSide, height: _nSide}; }
} class ShapeContainer {
private var _aShapes:Array; private var _nWidth:Number; private var _nHeight:Number; public function ShapeContainer(nWidth:Number, nHeight:Number) { _nWidth = nWidth; _nHeight = nHeight; _aShapes = new Array(); } public function addShape(shObject:IShape):Boolean { if(shObject.getDimensions().height > _nHeight) { return false; } var nSum:Number = 0; for(var i:Number = 0; i < _aShapes.length; i++) { nSum += _aShapes[i].getDimensions().width; } if(nSum + shObject.getDimensions().width > _nWidth) { return false; } else { _aShapes.push(shObject); return true; } }
}
</source>
Implementing an Interface
<source lang="java">
class ClassName implements InterfaceName {
// Class code goes here.
} class ClassName implements Interface1Name, Interface2Name, Interface3Name {
// Class code goes here.
} class ClassName extends SuperClassName implements InterfaceName {
// Class code goes here.
}
</source>
Implement interface
<source lang="java">
class Didgeridoo implements IProduct {
private var _price:uint = 100; private var _name:String = "Handpainted Didgeridoo"; private var _description:String = "Imported from Australia"; public function get price():uint { return this._price; } public function set price(val:uint):void { this._price = val; } public function get name():String { return this._name; } public function set name(val:String):void { this._name = val; } public function get description():String { return this._description; } public function set description(val:String):void { this._description = val; } }
interface IProduct {
function get price():uint; function set price(val:uint):void; function get name():String; function set name(val:String):void; function get description():String; function set description(val:String):void;
}
class TShirt implements IProduct {
private var _price:uint = 20; private var _name:String = "T-Shirt"; private var _description:String = "Made in China"; public function get price():uint { return this._price; } public function set price(val:uint):void { this._price = val; } public function get name():String { return this._name; } public function set name(val:String):void { this._name = val; } public function get description():String { return this._description; } public function set description(val:String):void { this._description = val; } } </source>
Implement two interface
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var t:TShirt = new TShirt(); trace(t.name); } }
} interface IClothing extends IProduct {
function get color():String; function set color(val:String):void; function get size():String; function set size(val:String):void; }
interface ICustomizable {
function get customPrint():String; function set customPrint(val:String):void; }
interface IProduct {
function get price():uint; function set price(val:uint):void; function get name():String; function set name(val:String):void; function get description():String; function set description(val:String):void; }
class TShirt implements IClothing, ICustomizable {
private var _price:uint = 20; private var _name:String = "T-Shirt"; private var _description:String = "Made in China"; private var _color:String = "black"; private var _size:String = "XXL"; private var _customPrint:String = ""; public function get price():uint { return this._price; } public function set price(val:uint):void { this._price = val; } public function get name():String { return this._name; } public function set name(val:String):void { this._name = val; } public function get description():String { return this._description; } public function set description(val:String):void { this._description = val; } public function get color():String { return this._color; } public function set color(val:String):void { this._color = val; } public function get size():String { return this._size; } public function set size(val:String):void { this._size = val; } public function get customPrint():String { return this._customPrint; } public function set customPrint(val:String):void { this._customPrint = val; } } </source>
Interface Inheritance
<source lang="java">
public interface IntA {
function methodA ( ):void;
} public interface IntB extends IntA {
function methodB ( ):void;
} public interface IntC {
function methodC ( ):void;
} public interface IntD {
function methodD ( ):void;
} public interface IntE extends IntC, IntD {
function methodE ( ):void;
}
</source>
Interface Syntax and Use
<source lang="java">
interface SomeName {
function method1 (param1:datatype,...paramn:datatype):returnType; function method2 (param1:datatype,...paramn:datatype):returnType; ... function methodn (param1:datatype,...paramn:datatype):returnType;
} class SomeName implements SomeInterface { } A class can legally implement more than one interface by separating interface names with commas. class SomeName implements SomeInterface, SomeOtherInterface { }
</source>