php向下转型,从向上向下转型到----抽象类接口(一)

对象的多态性-向上向下转型

向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动转换;

向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类) 父类实例,强制转换;

注意:对象的多态性和方法复写是联系在一起的

向上转型:

classA{public voidprint(){

System.out.println("a")

}

}class B extendsA{public voidprint(){

System.out.println("b")

}

}public classDemo{public static voidmain(String args[]){

B b=newB();

b.print();

}

}

注意:本程序实例化的是子类对象,并且print()方法又被复写了,最终调用的一定是被复写过的方法

向下转型

public static voidmain(String args[]){

A a= newB();

B b=(B) a;

b.print();

}

注意:必须发生向上转型之后,才能发生向下转型,而向下转型有风险,尽量少使用.

好处:在实际开发中,对象向上转型的主要意义在于参数的统一,也是最为主要的用法,而对象的向下转型指的是调用子类的个性化操作.

举个例子,假如有多个类继承自一个类,并且复写其中的一个方法,那么我们可以:

public classDemo{public static voidmain(String args[]){

fun(newB());

fun(newc());

}public static void fun(A a){ //这里只用到了A a 一个参数

a.print();

}

}

而向下转型.如果子类有没有复写父类的方法,而且要调用,那么就要用到了.

抽象类

抽象类:抽象类就是指在普通方法里增加了抽象方法,而且抽象方法没有方法体,用abstract修饰.同时有抽象方法的类,也必须要被abstract修饰

而抽象类与向上向下转型的关系是,抽象类无法实例化,要调用,必须使用向上向下转型.

同时抽象类必须被继承,而且子类必须重写父类的所有抽象方法.

抽象类的限制

抽象类不能用final修饰

抽象类的应用---模板设计模式

普通方法定义在抽象类时,可以直接调用类中的方法,但是具体的抽象方法内容就必须由子类提供

abstract classA{public void fun(){ //普通方法调用子类方法

this.print();

}public abstract void print(); //抽象方法

}class X extendsA{public voidprint(){

System.out.println("重写父类的抽象方法")

}

}public classDemo{public static voidmain(String args[]){

A a=newX();

a.fun();

}

}

理解:如果将父类的方法print比喻为叫这一行为的话,子类的重写则是表明具体是什么在叫.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值