技术开发 频道

Perl的面向对象编程

  七、方法的调用

  调用一个对象的方法有两种方法,一是通过该对象的引用(虚方法),一是直接使用类名(静态方法)。当然该方法必须已被输出。现在给Cocoa类增加一些方法,代码如下:

  package Cocoa;   require Exporter;   @ISA = qw(Exporter);   @EXPORT = qw(setImports, declareMain, closeMain);   #   # This routine creates the references for imports in Java functions   #   sub setImports{   my $class = shift @_;   my @names = @_;   foreach (@names) {   print "import " . $_ . ";n";   }   }   #   # This routine declares the main function in a Java script   #   sub declareMain{   my $class = shift @_;   my ( $name, $extends, $implements) = @_;   print "n public class $name";   if ($extends) {   print " extends " . $extends;   }   if ($implements) {   print " implements " . $implements;   }   print " { n";   }   #   # This routine declares the main function in a Java script   #   sub closeMain{   print "} n";   }   #   # This subroutine creates the header for the file.   #   sub new {   my $this = {};   print "n /* n ** Created by Cocoa.pm n ** Use at own risk n */ n";   bless $this;   return $this;   }

  现在,我们写一个简单的Perl脚本来使用该类的方法,下面是创建一个Java applet源代码骨架的脚本代码:

  #!/usr/bin/perl   use Cocoa;   $cup = new Cocoa;   $cup->setImports( "java.io.InputStream", "java.net.*");   $cup->declareMain( "Msg" , "java.applet.Applet", "Runnable");   $cup->closeMain();

  这段脚本创建了一个叫做Msg的Java applet,它扩展(extend)了java.applet.Applet小应用程序并使之可运行(runnable),其中最后三行也可以写成如下:

  Cocoa::setImports($cup, "java.io.InputStream", "java.net.*");   Cocoa::declareMain($cup, "Msg" , "java.applet.Applet", "Runnable");   Cocoa::closeMain($cup);

  其运行结果如下:

  /*   ** Created by Cocoa.pm   ** Use at own risk   */   import java.io.InputStream;   import java.net.*;   public class Msg extends java.applet.Applet implements Runnable {   }

  注意:如果用->操作符调用方法(也叫间接调用),参数必须用括号括起来,如:$cup->setImports( "java.io.InputStream", "java.net.*");而双冒号调用如:Cocoa::setImports($cup, "java.io.InputStream", "java.net.*");也可去掉括号写成:Cocoa::setImports $cup, "java.io.InputStream", "java.net.*" ;

 

0
相关文章