day02-面向对象进阶(二)

一、三大特征之三:多态

什么是多态? 基于继承/实现的前提下的一种现象,一定要方法的重写

格式:父类/接口  对象名 =  new 子类对象

Demo

多态有哪些表现?对象和方法的多态(属性是没有多态的

多态的好处:

1.方便实现方法的切换

2.可以作为方法的参数,接受不同的子类,提高代码的扩展性

  

多态的缺点:不能调用子类的特有的方法

例如

若需要调用,则需要强制转换

格式:子类 变量名 = (子类)父类对象

类型转换有几种形式?能解决什么问题?

自动类型转换、强制类型转换。

可以把对象转换成其真正的类型,从而解决了多态下不能调用子类独有方法的问题。

注意事项:

① 存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。

② 运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来

③ 建议在强转前使用instanceof去 判断当前对象的真实类型,再进行强转。

二、final

概念:表示最终的意思

应用:修饰变量、类、方法

修饰变量:

修饰类:代表最终类,不能被继承

 修饰方法:表示最终的方法,不能被重写

 

应用场景:

模板方法设计模式:解决方法中存在重复代码的问题。

作用:抽取多个方法中相同的代码

步骤:① 定义一个抽象类 ② 在类中写一个模板方法(普通方法)用来存放相同代码,要用final ③ 定义抽象方法,不同的功能让子类去实现。

Demo

常量:

概念:被 static 和 final 修饰的变量

作用:记录一些系统的信息,或者特殊的数据,如公司的名称

好处:可读性好

命名规范:每个单词的每个字母都需要大写,多个单词之间通过下划线隔开

Public static final String SCHOOL_NAME = “民族高中”

三、抽象类

格式:public abstract class 类名{

       //抽象方法

      public abstract 返回值类型 方法名(参数); // 没有方法体

}

好处:在抽象类中定义抽象方法,强制子类去重写抽象方法,更好的实现多态

注意事项:①抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类 ② 抽象类不能创建对象,必须通过子类起继承抽象类 ③ 一个类继承了抽象类,一般要么重写所有的抽象方法,或者把这个类定义为抽象类

使用场景:如果想要子类有着和父类有一样的方法标签,就可以使用抽象类

Demo

子类一定要重写完父类的所有抽象方法 

抽象类的好处:相同的代码抽取上来,更好的支持多态,提高代码的灵活性;当需求不明确的时候,设置抽象方法,然后具体的功能让子类来实现

能不能加上static 和 final:抽象方法需要被继承或者说重写,所以不能使用final

Static 可以通过 类名.方法名 去调用, 但是直接调用一个抽象方法是没有意义的

Private 表示私有的 不能被重写

四、接口

概念:接口就是一种特殊的结构,又或者理解成彻底的抽象类。

作用:起到约束的作用,让子类一定要去重写里面的方法。

使用:接口不看创建对象,需要一个类去实现(实现类)public class A implements 接口 B,接口C {}

什么时候用抽象类、什么时候使用接口?

当需要限制那个类使用时候,使用抽象类

一个类可以实现多个接口

接口的好处:可以多实现,扩展性强,可以让一个类具有更多的身份,其实就是多态;接口比较纯粹,在接口中定义的一般都是抽象方法。

Demo

创建三个接口,分别实现 唱歌、跳舞、rapper 三个功能

定义一个方法去实现

测试类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值