class BenHang extends Card{ /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){ parent::__construct($cardno,$pwd, $name,$money); } function take($money){ echo "本行取款{$money}没有手续费·····<br>"; }function zhuan($money){ echo "本行转账{$money}·····<br>"; } }$benhang=new BenHang(123,344,444,444);$benhang->check();$benhang->take(234);$benhang->zhuan(4555);/*其他银行卡的类*/class Qita extends Card{function __construct($cardno,$pwd, $name,$money){ parent::__construct($cardno,$pwd, $name,$money); } function take($money){ echo "非本行取款{$money}有手续费2元·····<br>"; } }$qita=new Qita(123,344,444,444);$qita->check();$qita->take(99);
하위 클래스가 상위 클래스를 상속받도록 하려면 하위 클래스에 확장 키워드를 사용하세요.
class Student는 Person을 확장합니다.{}
2. 상속을 구현할 때 주의할 사항은 무엇입니까?
① 하위 클래스는 상위 클래스의 비공개 속성만 상속할 수 있습니다.
②하위 클래스가 상위 클래스를 상속받은 후 상위 클래스의 속성과 메서드를 하위 클래스에 복사하는 것과 동일하며 $this를 사용하여 직접 호출할 수 있습니다. ③ PHP는 단일 상속만 지원하며, 하나의 클래스가 여러 클래스를 상속하는 것을 지원하지 않습니다. 그러나 클래스는 다중 레벨 상속을 수행합니다.
class Person{}
//Student 클래스 Chengnian 클래스와 Person 클래스의 속성과 메서드를 모두 갖습니다.
3. 메소드 오버라이드(메소드 재작성)
조건 ① 하위 클래스는 상위 클래스를 상속받습니다.
조건 ② 하위 클래스는 상위 클래스의 기존 메서드를 재정의합니다. 위의 두 가지 조건을 충족하는 것을 메소드 커버리지라고 합니다. 재정의 후 하위 클래스가 메서드를 호출하면 하위 클래스의 자체 메서드가 호출됩니다.
마찬가지로 메서드 재정의 외에도 하위 클래스는 속성 재정의를 위해 상위 클래스와 동일한 이름의 속성을 가질 수도 있습니다.
4. 하위 클래스가 상위 클래스 메서드를 재정의하는 경우 하위 클래스에서 동일한 이름을 가진 상위 클래스 메서드를 호출하는 방법은 무엇입니까? : PARTENT :: 메소드 이름 ();
따라서 하위 클래스가 상위 클래스를 상속하는 경우 하위 클래스 구조의 첫 번째 단계를 먼저 호출해야 합니다. function __construct($name,$sex,$school){ parent::__construct($name,$sex); $this->school = $school; } 实例一枚: 二、封装 class Person{protected $name;public $sex;
function __construct($name,$sex){ //声明构造函数 $this->name = $name;
$this->sex = $sex;
}
function say(){
echo "我叫{$this->name},我是{$this->sex}生!<br>";
}
} class Student extends Person{ //子类继承父类public $school; function __construct($name,$sex,$school){ //子类的构造函数 parent::__construct($name,$sex); //调用父类构造进行复制$this->school = $school;
}
function program(){
echo "PHP真好玩!我爱PHP!PHP是世界上最好用的编程语言!<br>";
}
function say(){
parent::say(); //重写父类的同名方法echo "我是{$this->school}的";
}
}
$zhangsan = new Student("张三","男","起航");
$zhangsan->say();
$zhangsan->program();
class Person{public $name;public $age;public $sex;
function __construct($name, $age,$sex){
$this->name=$name;
$this->setAge($age);
$this->setSex($sex);
}
function setAge($age){if($age>=0&&$age<=120){return $this->age=$age;
}else{
die("年龄输入有误!!!");
}
}
function setSex($sex){if($sex=="女"||$sex=="男"){return $this->sex=$sex;
}else{
die("性别输入有误!!!");
}
}
function say(){
echo "我的名字叫{$this->name},我的年龄{$this->age},我的性别是{$this->sex}<br>";
}
}class Work extends Person{private $position;
function __construct($name, $age,$sex,$position){
parent::__construct($name, $age,$sex);
$this->job=$job;
$this->setPosition($position);
}
function setPosition($position){
$arr=['总监','董事长','程序员','清洁工'];if(in_array($position, $arr)){return $this->position=$position;
}else{
die("不存在该职位");
}
}
function __set($key,$value){if($key=="age"){return parent::setAge($value);
}
elseif($key=="sex"){return parent::setSex($value);
}
elseif($key=="position"){return $this->setPosition($value);
}return $this->$key=$value;
}
function say(){
parent::say();
echo "我的职位是{$this->position}";
}
}
$zhangsan=new Work("张三",22,"男","总监");
$zhangsan->setSex("女");
$zhangsan->setAge(30);// $zhangsan->setPosition("董事长");$zhangsan->position="董事长";
$zhangsan->name="lisi";$zhangsan->say();
/*墨盒接口
* 纸张接口*/
interface InkBox{ function color();
}interface Paper{ function sizes();
}class Computer{function fangfa(InkBox $a,Paper $b){ //父类引用echo "即将开始打印····<br>"; $a->color();$b->sizes();echo "打印结束···<br>";
}
}class Color implements InkBox{function color(){echo "正在装载彩色墨盒<br>";echo "实现彩色墨盒<br>";
}
}class White implements InkBox{function color(){echo "正在装载黑白墨盒<br>"; echo "实现黑白墨盒<br>";
}
}class A4 implements Paper{function sizes(){echo "正在加载A4纸张<br>";echo "实现A4纸张<br>";
}
}class A5 implements Paper{function sizes(){echo "实现A5纸张<br>";
}
}$com=new Computer();//创建对象$com->fangfa(new Color(),new A4());//子类对象
위 내용은 PHP 객체지향의 세 가지 주요 특징을 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!