我想知道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()。 任何帮助是极大的赞赏。
答案 0 :(得分:1)
不,据我所知你不能这样做。如果要调用Person中专门定义的方法,则应将其声明为private并在Person中调用它。这样就无法覆盖它。如果您希望它可以从Person外部调用,但不能覆盖,则可以将其声明为final。无论哪种方式,您都需要一个单独的方法。
干杯, 马库斯
答案 1 :(得分:1)
Java中没有与 self 等效的内容。如果在子类中重写方法并使用子类实例调用该方法,则会执行子类中重写的方法。
子类可以选择使用 super 调用超类方法,在您的示例中,子类getTitle()
方法可以是:
public String getTitle() {
return super.getTitle() + " the geek";
}