有一些方法可以在java中初始化一个抽象类的属性,例如java中的这个例子吗?
public abstract class Person
{
private String name;
public Person(String name)
{
this.name = name;
}
}
public class Client extends Person
{
public Client(String name)
{
super(name);
}
}
这是我的实际代码: 我收到这个错误:“变量$ name似乎未初始化”
abstract class Person
{
private $name;
public function Person($name)
{
$this->$name = $name;
}
}
class Client extends Person
{
private $name;
public function Client($name)
{
parent::Person($name);
}
}
答案 0 :(得分:1)
从类变量中删除$
$this->$name = $name;
完全错了,试试:
$this->name = $name;
答案 1 :(得分:1)
除了注释和@Ali Torabi的答案中指出的内容之外,您应该注意的一件事是,在调用子类构造函数时,不会隐式调用父类的构造函数。
来自文档:
为了运行父构造函数,需要在子构造函数中调用parent::__construct()
。
abstract class Person {
function __construct() {
echo 'Person constructor called<br/>';
}
}
class Client extends Person {
function __construct() {
parent::__construct();
echo 'Client constructor called<br/>';
}
}
我想这一点很重要,因为在某些语言中会自动调用父构造函数。如果您希望在扩展Person类的所有类中都可以使用$ name变量,则应该保护IMO变量。使用private关键字使属性仅在定义的类中可用。