当我实例化A类时,如何访问B类的功能, 而不是抽象类?这个问题最简单的解决办法是什么?
class A
{
public $a = 3;
public function addup($var)
{
return ($var + $var);
}
}
class B extends A
{
public function addup1($var)
{
return ($var * $var);
}
}
$obj = new A();
echo "Func from Class A: " . $obj->addup(3);
echo "<br>";
echo $obj->addup1(3);
echo "<br><br><br><br>";
$obj = new B();
echo "Func from Class A: " . $obj->addup(3);
echo "<br>";
echo "Func from Class B: " . $obj->addup1(3);
?>
答案 0 :(得分:2)
通常你可以/不应该。如果你有一辆汽车,例如:
class Car {
public function drive() {
...
}
}
汽车基本上只能驾驶。他不知道任何其他行为。汽车对延伸它的其他课程一无所知。现在让我们通过创建一个Batmobile来扩展汽车。
class Batmobile extends Car {
public function shoot() {
...
}
}
蝙蝠车有能力用机枪射击。这是除了汽车可以做的所有(在这种情况下驾驶)。另一方面,普通汽车$fiat = new Car();
不是蝙蝠车,因此无法射击。
回到你的案子。如果您有A的实例,则其所有函数都在此类中定义。它没有addup1()方法。您现在有多种选择:
即使你可以做第二个解决方案,我也不推荐它。这违背了继承的想法。最好重新考虑类,也许可以稍微改变一下。