亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從類繼承時忽略某些方法

從類繼承時忽略某些方法

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 關注
  • 93 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號