如何在java中使用self(php)like关键字?

时间:2015-03-10 09:19:24

标签: java php

我想知道java在php中没有像 self 这样的关键字来获得与此php代码产生相同的结果。

    <?php
   class Person {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    public function getTitle() {
        return $this->getName()." the programmer";
    }

    public function sayHello() {
        echo "Hello, I'm ".$this->getTitle()."<br/>";
    }

    public function sayGoodbye() {
        echo "Goodbye from ".self::getTitle()."<br/>";  
    }
}

class Geek extends Person {
    public function __construct($name) {
        parent::__construct($name);  //calling person class's constructor
    }

    public function getTitle() {
        return $this->getName()." the geek";
    }
}

$geekObj = new Geek("Avnish alok");
$geekObj->sayHello();
$geekObj->sayGoodbye();

/*This will output:

    Hello, I'm Avnish alok the geek
    Goodbye from Avnish alok the programmer
    */


?>

在java中,我写了相同的代码,但结果不同。看看我的java代码

    class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public String getTitle() {
        return this.getName()+" the programmer";
    }

    public void sayHello() {
        System.out.println("Hello, I'm "+this.getTitle());
    }

    public void sayGoodbye() {
        System.out.println("Goodbye from "+getTitle());  
        /*
      Here i'm unable to call Person class getTitle(). while in php i can easily achieve this by using self::getTitle().
    */
    }
}

class Geek extends Person {
    Geek(String name) {
        super(name);  
    }

    public String getTitle() {
        return this.getName()+" the geek";
    }
}

class This_Ex
{

public static void main(String[] arg)
{
Geek obj=new Geek("Avnish alok");
obj.sayHello();
obj.sayGoodbye();
}

}


/*This will output:

Hello, I'm Avnish alok the geek
Goodbye from Avnish alok the geek
*/

看看我的Person类sayGoodbye()方法

System.out.println("Goodbye from "+getTitle());  

这里我只想使用Person类的方法getTitle()。 任何帮助是极大的赞赏。

2 个答案:

答案 0 :(得分:1)

不,据我所知你不能这样做。如果要调用Person中专门定义的方法,则应将其声明为private并在Person中调用它。这样就无法覆盖它。如果您希望它可以从Person外部调用,但不能覆盖,则可以将其声明为final。无论哪种方式,您都需要一个单独的方法。

干杯, 马库斯

答案 1 :(得分:1)

Java中没有与 self 等效的内容。如果在子类中重写方法并使用子类实例调用该方法,则会执行子类中重写的方法。

子类可以选择使用 super 调用超类方法,在您的示例中,子类getTitle()方法可以是:

public String getTitle() {
    return super.getTitle() + " the geek";
}