为了账号安全,请及时绑定邮箱和手机立即绑定

从类继承时忽略某些方法

从类继承时忽略某些方法

PHP
一只萌萌小番薯 2022-10-09 17:33:28
我正在学习 oop 并使用 PHP 练习这些概念。我想做的是有一个 classHuman和一个 class Dog。类Human将有两个属性:$name:string和$age:int。类Human首先被声明,有一个方法speak()。我的问题是,当Dog扩展自时Humans,我希望它拥有Human除了方法之外的所有内容speak(),它将被其独特的方法所取代bark()。根据我的搜索,一个解决方案是设置speak()为private,然后Dog不会继承它。但是,当分配Human给 时$person,speak()由于它是私有的,因此也无法访问。这只是我理解oop的一种做法。如果这是一个真正的软件,在最佳实践方面我应该怎么做?同样,我是 oop 的初学者。谢谢!这是我的代码:<?php    class Human {      public $name;      public $age;      public function __construct($name, $age) {        $this->name = $name;        $this->age = $age;      }      public function speak() {      }    }    class Dog extends Human {      public function bark() {      }    }    $people = array();    $dogs = array();    array_push($dogs, new Dog("Rocky", 4));    array_push($people, new Human("Carlos", 21));    $people[0]->speak();    $dogs[0]->bark();?>
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

就 OOP 而言,Dog 扩展 Human 没有任何意义。想一想,只是没有任何意义。你可以做的实际上是定义一个抽象类或一个 Dog 和 Human 都从中扩展的接口。像这样:


abstract class Animal 

{

     abstract public function communicate();

     ...anyOtherMethods that are commom between dogs and Humans

}


class Human extends Animal 

{

     public function communicate()

     {

        echo 'speak';

     }

}


class Dog extends Animal

{


     public function communicate()

     {

        echo 'bark';

     }

}


(new Dog)->communicate(); // bark

(new Human)->communicate(); //speak


查看完整回答
反对 回复 2022-10-09
  • 1 回答
  • 0 关注
  • 57 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信