Javaday09多态和抽象类

当多个类存在继承关系的时候,用父类声明子类的时候称为多态

抽象类,抽象类不能实例化对象知识提供了子类共有的部分,可能存在每个子类需要不同实现的方法,把他们写成一个抽象的,用于给继承本类的子类制定规则,让子类根据规则分别去实现自己不同的功能

多态

多态用父类的引用执行子类的对象

java分成两个阶段编译,运行

编译阶段只能识别等号(=)前面的,不会识别等号后面的

运行阶段从运行开始识别等号后面的 ,对象开始干活

Person person=new Student();

编译阶段识别:person 是Person类的引用

运行阶段:new出来的是student的对象

类型:动态类型,动态绑定,动态加载

多态加载:在编译阶段不能确定具体的对象类型,只有到了运行阶段才能确定谁是真正干活的对象,多态就是典型的动态加载

在编译的时候识别的是引用类型,不识别兑现所以只能判断出Person中的方法,而不能直接调用子类特有的方法

多态的优点

多态可以提高代码的扩展性

例如,给动物喂饭

对象转型

在多态的前提下说向上向下转型

向上转型

有子类类型转换为父类类型就是向上转型

向上转型是自动转型,一定会转型成功

向上转型后只能访问父类中定义的成员

实现多态

向下转型

对象从父类类型转换为子类类型

向下转型是一个显示的过程,相当于强制类型转换,有可能会失败

向下转型后的兑现可以访问子类中独有的成员

instanceof关键字

向下转型有可能会失败所以我们在向下转型之前最好先用instanceof进行检查

使用方法: 对象 instanceof 类或者类的子类

对象是否为后面的类或者类的子类,返回true或者false

父子类出现同名成员

继承下的调用规则

成员变量调用子类的

成员方法调用子类的,子类没有再去调用父类的

多态下的调用规则

成员变量编译的时候能不能访问看父类,运行时候也看父类

成员方法,编译的时候能不能访问看父类,运行的时候看子类

静态成员方法 编译运行都看父类

抽象类

每个子类都有自己的实现方法,父类不能决定它们的实现,于是只把他们在实现的时候需要遵守的规则制定出来,子类可以有自己不同的实现方法,但是他们都要遵守父类所制定的规则;于是父类只在类中声明方法,子类根据方法分别去实现。

抽象方法的特点

抽象方法只有声明没有实现

抽象方法只能定义在抽象类中

非抽象子类在继承抽象父类的时候必须实现父类中所有的抽象接口

抽象类不能直接创建对象,可以通过子类间接创建对象

抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类

继承了抽象类的子类一定要实现抽象方法,如果不实现就只能将自己也变成抽象的

抽象类不能直接创建对象,必须通过子类实现,所以抽象类一定有子类

final,static,private不能和abstract一起用

final修饰的类不能有子类,方法不能重写,但是abstract必须有子类,必须重写

static修饰的方法可以通过类名调用,abstract必须通过子类实现

private修饰的方法不能重写,abstract必须重写

抽象类的使用场景

抽象类中制定规则,要求子类必须实现,约束子类的行为,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值