的应用场合,Java中的继承

本文实例剖析了php承袭中方法重载(覆盖)的应用场馆。分享给我们供我们参谋。具体剖判如下:

重载新的不二法门

重载:

同叁个类中的好些个格局可以享有同一个名字,只要他们的参数注脚不一致就能够

在Java中通过着重字extends承继二个已有的类,被持续的类称为父类(超类,基类),承接发生的新的类称为子类(派生类)。Java不容非常多三翻五次。
1.继承

方法重载(override)/覆盖——在怎么境况下选取:当父类知道全体的子类都需求选取三个主意,但父类不亮堂怎么去写那么些法牛时,就要求动用方法的重载。那时候,可以让子类去重写,来覆盖那么些点子。

在读书PHP
这种语言中你会意识,PHP中的方法是不能够重载的,所谓的形式重载正是概念同样的格局名,通过“参数的个数“差异或“参数的体系“区别,来访问大家的同一方法名的两样方法。可是因为PHP是弱类型的言语,所以在措施的参数中自己就能够收到不一致品类的数码,又因为PHP的主意能够收起不定个数的参数,所以经过传递不相同个数的参数调用不均等格局名的两样方式也是不成立的。所以在PHP里面未有主意重载。不能够重载也正是在你的体系中无法定义同样情势名的情势。另外,因为PHP没盛名子空间的定义,在同二个页面和被含有的页面中不可能定义同样名称的法子,也不能够定义和PHP给本身提供的办法的办法重名,当然在同一个类中也不能定义同样名称的主意。

覆盖:

子类重新完毕了父类中的方法(承袭)

class Animal{
    void eat(){
        System.out.println("Animal eat");
    }
    void sleep(){
        System.out.println("Animal sleep");
    }
    void breathe(){
        System.out.println("Animal breathe");
    }
}

class Fish extends Animal{

}

public class TestNew{

    public static void main(String[] args) {
        //继承了父类的所有方法
        Animal an = new Animal();
        Fish fn = new Fish();

        an.breathe();
        fn.breathe();

     }
 }

开首实例——父类(动物)知道其子类(猫和狗)都会叫,但它们的叫法都不等同,所以父类无法去写这么些措施,只可以让子类(猫和狗)去定义。代码如下:

我们这里所指的重载新的办法所指的是怎么着啊?其实大家所说的重载新的点子正是子类覆盖父类的已有些艺术,那干什么要这么做呢?父类的秘诀不是能够承袭过来直接用啊?但有点动静是大家亟必要隐藏的,举个例子说大家前段时间提到过的例证里面,“Person”这厮类里面有贰个“说话”的不二等秘书技,全体继续“Person”类的子类都以足以“说话”的,我们“Student”类就是“Person”类的子类,所以“Student”的实例就足以“说话“了,可是人类里面“说话”的办法里面说出的是“Person”类里面包车型地铁性情,而“Student”类对“Person”类进行了增加,又增加出了多少个新的属性,尽管应用持续过来的“say()”说话格局的话,只好说出从“Person”类承继过来的这些属性,那么新扩展的这些属性使用这一个延续过来的“say()”的艺术就说不出来了,那有些人就问了,小编在“Student”这些子类中再定义多个新的格局用于出口,说出子类里面有着的性质不就行了吗?一定毫无那样做,从虚无缥缈的角度来说,一个“学生”不可能有二种“说话”的办法,纵然你定义了多少个不等的言语的主意,能够兑现您想要的机能,被持续过来的百般“说话“方法大概没有时机用到了,何况是三番五次过来的你也删不掉。那年我们将在动用覆盖了。

多态准则:

1.方法名一定要一致

2.传唱的参数应当要不均等

3.当父类的援引指向子类的指标时,调用三个办法 而那个主意
恰好又被子类所重写,此时调用的主意是子类的主意。

   父类的援引调用属性时,调用本人的质量。

4.假诺引用前增加final修饰符,但那个引用一旦指向了有些对象,指向不可能改造,

运营之后的结果为:
Animal breathe
Animal breathe

<?php
class Animal{
 public $name;
 protected $price;

 function cry(){
 echo "不知道动物怎么叫";
 }
}
class Dog extends Animal{
 function cry(){
 echo "汪汪...";
 }
}
class Pig extends Animal{
 function cry(){
 echo "哼哼..."
 }
}
?>

尽管如此说在PHP里面不可能定义同名的艺术,然则在爸爸和儿子关系的八个类中,大家得以在子类中定义和父类同名的不二秘诀,那样就把父类中承继过来的格局覆盖掉了。

代码:

//多态

public class student {

的应用场合,Java中的继承。//父类中的方法

void print(){

System.out.println(“那是小明同学”);

}

void print(String name){

System.out.println(name + “是小明的校友”);

}

void print1(){

System.out.println(“那是父类中的八个函数”);

}

public static void main(String[] args) {

student stu = new student();

student1 stu1 = new student1();

stu.print();

stu.print(“tom”);

System.out.println(“———–“);

stu1.print();

//—————————-

student stu2 = new student2();

stu2.print1();

}

}

//继承student

class student1 extends student{

//覆盖父类的print方法

void print(){

System.out.println(“那是小明的同桌”);

System.out.println(“他很漂亮好”);

}

}

class student2 extends student{

void print(){

System.out.println(“那是学生的一个函数”);

}

void print1(){

System.out.println(“那是学员的另七个函数”);

}

}

2.覆盖

艺术重载/覆盖的大旨境想与细节(读起来有些呦口):

 代码如下

注意:studentClass(父类) studentMen(子类) 

class Animal{
    void eat(){
        System.out.println("Animal eat");
    }
    void sleep(){
        System.out.println("Animal sleep");
    }
    void breathe(){
        System.out.println("Animal breathe");
    }
}

class Fish extends Animal{
    void breathe(){
        System.out.println("Fish breathe");
    }

}

public class TestNew{

    public static void main(String[] args) {
        //继承了父类的所有方法
        Animal an = new Animal();
        Fish fn = new Fish();

        an.breathe();
        fn.breathe();

    }
}

1、需求子类的格局,其格局名称、参数列表与父类方法一样。如例子中cry(),不可能增多参数,改成cry($naaa)等。注意:这里并不供给参数名同样,只是需要参数的个数是同样的。
2、所谓的重载或隐藏,并非将父类的不二等秘书技覆盖。也能够这么了然:假设子类有调用该措施时,借使在友好类里找不到那些点子,那么它会去找父类里,看有未有这些主意。那也是多态的明白
3、若是子类里某些方法,要把父类里同样名称方法里的剧情承接下来,能够选用parent::方法名 或 父类名::方法名 承继。在子类定义的格局Nelly用。
4、访谈权限难题,子类的探问范围>=父类的探问范围,即就算父类是protected
function cry(),子类则不得不是protected或public。

//定义三个“人”类做为父类
class Person
{
    //上边是人的积极分子属性
    var $name;  //人的名子
    var $sex;    //人的性别
    var $age;    //人的岁数

尽管父类中绝非这一个法子 而在子类中冒出这几个法子

运转之后的结果为:
Animal breathe
Fish breathe

梦想本文所述对我们的php程序设计有着支持。

    //定义贰个构造方法参数为属性姓名$name、性别$sex和年龄$age实行赋值
    function __construct($name, $sex, $age)
    {
        $this->name=$name;
        $this->sex=$sex;
        $this->age=$age;
    }

studentClass stu = new stuClassMen();指向子类 只好操作子类中的方法 stu是父类的数据类型。 那么stu不得以调用那个方法 , 只可以调用父类中有而被子类覆盖的办法。

要是在子类中定义一个跟父类一样的函数,也即在子类中定义三个与父类同名,重临类型,参数类型均一致的多少个措施,称为方法的遮盖。方法的掩饰爆发在子类和父类之间。

您或然感兴趣的稿子:

  • PHP利用func_get_args和func_num_args函数达成函数重载实例
  • php中拷贝构造函数、赋值运算符重载
  • php函数重载的代表格局–伪重载详解
  • PHP小本领之函数重载
  • php面向对象的法子重载三种版本相比较
  • PHP中子类重载父类的主意【parent::方法名】
  • php面向对象全战术(八)重载新的措施
  • PHP使用方法重载落成动态创造属性的get和set方法
  • PHP面向对象编制程序之深入精晓方法重载与措施覆盖(多态)
  • PHP完成重载的常用方法实例详解
  • PHP达成的函数重载功用示例

    //此人方可说话的情势, 说出本人的习性
    function say()
    {
        echo “小编的名子叫:”.$this->name.” 性别:”.$this->sex.”
作者的年华是:”.$this->age.”<br>”;
    }
}

3.三个例子(承继Thread类)

class Student extends Person
{
    var $school;  //学生所在学堂的习性

public class Example extends Thread{
     @Override
     public void run(){
        try{
             Thread.sleep(1000);
             }catch (InterruptedException e){
             e.printStackTrace();
             }
             System.out.print("run");
     }
     public static void main(String[] args){
             Example example=new Example();
             example.run();
             System.out.print("main");
     }
}

    //那么些学生攻读的办法
    function study()
    {
        echo “笔者的名子叫:”.$this->name.” 小编正在”.$this->school.”
学习<br>”;
    }

以此类固然持续了Thread类,然而并从未真的创制二个线程
制造贰个线程需求覆盖Thread类的run方法,然后调用Thread类的start()方法运营,这里一贯调用run()方法并从未创制线程,跟普通方法同样调用同一,是逐条实施的。

    //那个学性能够出口的格局, 说出自个儿独具的属性,覆盖了父类的同名方法
    function say()
    {
        echo “小编的名子叫:”.$this->name.” 性别:”.$this->sex.”
作者的年纪是:”.$this->age.”作者在”.$this->school.”上学.<br>”;
    }
}

4.重载
假若有八个艺术的称呼一样,但参数不均等,那样多个方式是另一个格局的重载。
主意名同样格局的参数类型,个数顺序至少有一项分裂

地点的例子,
我们就在“Student”子类里覆盖了接二连三父类里面包车型地铁”say()”的方式,通过覆盖大家就贯彻了对“方法”扩大。

然而,像那样做就算缓和了小编们地点说的主题素材,不过在实质上付出中,一个艺术不容许就一条代码或是几条代码,比方说“Person”类里面的“say()”方法有在那之中有100条代码,若是大家想对那些法子覆盖保留原有的作用外加上一丢丢功力,就要把原来的100条代码重写一回,
再拉长扩充的几条代码,那还算是好的,而部分情形,父类中的方法是看不见原代码的,今年你怎么去重写原有的代码呢?大家也许有消除的方式,就是在子类这些格局中得以调用到父类中被隐敝的方法,
也正是把被掩盖的法子原有的效果拿过来再加上自个儿的一些职能,能够因此二种格局达成在子类的点子中调用父类被掩盖的主意:

相关文章