2010-02-12 36 views
9

Tôi đã tìm thấy một số mã có sử dụng các từ khóa virtual cho các chức năng, như:Từ khóa ảo, trong ActionScript, là gì?

package tryOut{ 
    public class Parent { 

     public function Parent() {} 

     public function foo():void{ 
      trace("Parent foo"); 
     }//foo 

     public virtual function bar():void{ 
      trace("Parent virtual bar"); 
     }//bar  
    }//class 
}//package 

Theo như tôi hiểu cách sử dụng các từ khóa virtual nên sửa đổi cách trọng một phương pháp làm việc, hoặc cách sử dụng một phương pháp trẻ sẽ làm việc, hoặc một cái gì đó. Nhưng có vẻ như nó chẳng có gì cả. Có gia hạn:

package tryOut { 
    public class Child extends Parent { 
     public function Child() {} 

     public override function foo():void { 
      trace("Child foo"); 
     }//foo 

     public override function bar():void { 
      trace("Child virtual bar"); 
     }//bar 

    }//class 
}//package 

Các bản in mã sau:

var parent:Parent = new Parent(); 
var child:Child = new Child(); 

parent.foo(); //Parent foo 
child.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
child.bar(); //Child virtual bar 

var childCast:Parent = child as Parent; 

parent.foo(); //Parent foo 
childCast.foo(); //Child foo 
parent.bar(); //Parent virtual bar 
childCast.bar(); //Child virtual bar 

Vì vậy, cả hai phương pháp làm việc như nhau liên quan đến việc ghi đè. Từ khóa virtual có thay đổi điều gì đó tôi bị thiếu không?

Trả lời

17

Từ các tài liệu giúp đỡ (Nếu bạn đang sử dụng Flash, thực hiện tìm kiếm cho 'ảo'):

Ngoài ra còn có một số định danh rằng đôi khi được gọi từ dành riêng là tương lai. Các số nhận dạng này không được đặt trước bởi ActionScript 3.0, mặc dù một số trong số đó có thể được coi là từ khóa theo phần mềm kết hợp ActionScript 3.0. Bạn có thể sử dụng nhiều trong số các mã định danh này trong mã của mình, nhưng Adobe khuyên bạn không nên sử dụng chúng vì chúng có thể xuất hiện dưới dạng từ khóa trong phiên bản tiếp theo của ngôn ngữ.

abstract boolean byte cast 

char debugger double enum 

export float goto intrinsic 

long prototype short synchronized 

throws to transient type 

virtual volatile 

Vì vậy, trong AS3, ảo hoàn toàn không có gì.

+3

Và trang thực tế là, đối với bất kỳ ai quan tâm: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3_Flex/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9b.html – LopSae

+0

Cảm ơn LopSae, tôi thực sự chỉ có Flash mở vào thời điểm đó, vì vậy Tôi đã sử dụng trợ giúp ngoại tuyến. – Ponkadoodle

1

Vì vậy, cả hai phương pháp đều hoạt động giống nhau về ghi đè.

Điều gì khiến bạn nghĩ vậy? Các thử nghiệm bạn đã hiển thị không thể so sánh được.

childCast được nhập là Parent, nhưng bạn vẫn kết thúc gọi hàm ở số Child.

Bạn không kiểm tra cùng một tình huống cho phương pháp phi ảo.

+0

Tệ của tôi, tôi đã sửa ví dụ. Mặc dù vậy, hành vi vẫn giữ nguyên. – LopSae

Các vấn đề liên quan