4月28 繼承 ,多型,過載,轉殖

2022-09-17 03:12:09 字數 3255 閱讀 2910

複習類和物件

類:由眾多物件抽象出來的

物件:通過類例項化出來的

<?php

class info

function say()

function set***()

function get***($s)

function __set($a,$n)

function __get($a)

}//例項化物件

$r =new info("男");

$r->code ="join";

$r->say();

//$r->***; //報錯的,因為是面向類的

var_dump($r);

繼承

相對于父與子的關係,可以聯想到人

概念:如果有乙個子類那麼該子類會繼承父類的一切東西 (私有成員訪問不到)

做法:要求有父類和子類

在定義子類的時候需要加乙個關鍵字:extends

特點:單繼承,乙個子類只能有乙個父類, 聯想到人:兒子只能有乙個父親,但是父親可以有多個兒子

如果父類中有建構函式,子類在例項化的時候按照父類的建構函式的標準來例項化

parent 代表弗雷,只能在子類中使用,整合的是info,寫info也是可以的,但最好不要寫不利於維護

final:用來修飾類的,代表該類是乙個最終類,該類無法被繼承 ,使用時寫在父類上面的

<?php

//final class info

class info

function say() }

class test extends info

function say()

}$t = new test("男");

$t->code = "p001";

//echo $t->***;//報錯了,訪問不到

//$t->run(); //父類中沒有的新方法的輸出

$t->say(); //父類中有的方法的輸出,不過父類的被覆蓋了

var_dump($t);

靜態成員

普通成員是體現在物件上的

類裡面的普通成員是屬於物件的,不屬於類的(呼叫的時候是用物件呼叫)

什麼叫做靜態的:靜態的成員是屬於類,不是屬於每個物件的

static關鍵字定義靜態的,定義靜態成員使用static關鍵字

靜態方法裡面不能呼叫普通成員,不能用$this,而是用self

靜態方法可以呼叫靜態成員但是要使用self關鍵字

self代表該類,$this 代表該物件

<?php

class info

function __construct($s)

function say() }

$r =new info("男");

echo info::$class ="0305"; //訪問靜態成員

echo info::test(); //靜態裡面不可以呼叫普通成員

$r->say();

//也就是說:靜態裡面不可以呼叫普通的,普通方法裡面可以呼叫靜態的,靜態方法裡面可以呼叫靜態成員

多型:

多型的概念:當父類引用指向子類例項的時候,由於子類對父類函式進行了重寫,導致我們在使用該引用去呼叫相應的方法表現出的不同

條件:1.必須有繼承

2.父類的引用指向子類的例項

3.子類必須要對父類的方法進行重寫

<?php

class ren

}class china extends ren }

class america extends ren

}$r = new ren(); // $r代表ren類的引用

$r1 = new china(); //$r1代表china類的引用

$r2 =new america();//$r2代表america類的引用

$r->say(); //hello

$r1->say(); //你好

$r2->say();//輸出hi

?>

在c#中ren $r =new ren();以後用到的所有的$r時就是ren的型別的,以後的賦值都沒有任何的作用

ren $r = new china();c#中也是可以的,是引用$r指向china的子類

再比如:ren $r = new america();會像上輸出america類裡面的一些方法

函式的過載:

關於過載,一般出現在強型別語言中,弱型別語言中不存在,因此這裡只是知道有這樣的定義,會出現在一些面試的場合。所以條件概念都是必記得內容

假如在php中有過載時:所有以下都是假設存在的

<?php

class ren

function say($a)

function say($a,$b)

}$r = new ren();

$r->say(); //會根據裡面寫的引數的個數輸出的內容不同

?>

過載實現的條件:1)函式名必須相同(方法名)

2)在函式裡面的引數的個數不同(方法名相同的基礎上)

3)如果引數的個數相同時,型別不同

eg:function say(int,$a) 和 function say(string,$b)

php是弱型別語言所以沒有過載:首先php什麼型別都可以儲存因此型別不同的條件不能滿足,

php裡面有可變引數的函式,因此引數個數不同這一塊很難實現

__tostring()方法的不同於c#中的,在c#中是轉換成字串型別

<?php

class ren

function __tostring() }

$r =new ren(); //__tostring用法的輸出

echo $r;

?>

物件的轉殖:

<?php

class ren

function __clone() //物件轉殖的時候自動執行

}$r =new ren();

$r->name = "張三";

$r1=clone $r;

echo $r->name;

echo $r1->name;

var_dump($r1);

?>

轉殖物件相當於複製乙份交給$r1,在function方法中$this是指新轉殖出來的物件

繼承,多型,過載的區別

學習隨手記。過載 同一方法或者構造器的獨一 各種引數型別 的排序組合,所能用的方法。其中構造器可以起到初始化類的作用,以便通過構造器設定類的不同例項。繼承 為了復用 而具體化自超類的子類。多型 為了類之間解耦而做的設計。greentea tiguanyin new greentea 例項化乙個物件,...

4月28日小結

4月28日小結 在這一周我們打了好多的訓練賽,在星期六下午的浙江省賽中,我一開始以為k題是乙個簡單的字串問題,以為很好a掉的,但是看懂這個題就廢了好久時間,並且看懂以後打起來不知道該從什麼地方下手打,就開始跟著榜打。那個h題,說實話是真的不難做,並且沒有用到現在學習的演算法,就是普通的if判斷而已,...

封裝繼承多型 繼承重寫過載

物件導向三大基本特徵 封裝 繼承 多型 封裝 首先封裝的意思就是將客觀事物封裝成抽象的類,封裝可以看做是乙個保護屏障,將實現細節全都隱藏起來,防止該類的 和資料被外部類定義的 隨機訪問。要訪問該類的 和資料,必須通過嚴格的介面控制。他的優點在於1.良好的封裝能夠減少耦合。2.類的內部結構可以自有修改...