2023.3.4~6--java基础语法学习day13~15--多态和抽象类

1.多态 

同种类型的对象,表现出的不同形态(没有继承就没有多态)

2.多态中成员访问的特点

成员变量:编译看左边,执行也看左边

编译看左边,javac编译代码的时候,会看左边的父类有没有这个变量,如果有编译成功,如果没有,则编译失败

运行看左边,java运行代码的时候,实际获取的就是左边父类中成员变量的值

成员方法:编译看左边,执行看右边(因为成员方法有重写)

编译看左边javac编译代码的时候,会看左边的父类有没有这个方法,如果有编译成功,如果没有编译失败

运行看右边,java运行代码的时候,实际上运行的子类中的方法,那么虚方法表中会把父类的方法进行覆盖

成员变量,在子类的对象中,会把父类的成员变量也继承下去

成员方法:如果子类对方法进行了重写,那么虚方法表中会把父类的方法进行覆盖

如果是属性,则调用属性的时候调用的是父类的属性

在java中加载字节码文件中永远是先加载父类,在加载子类

 3.多态的好处与坏处

多态的优势:方法中使用父类型作为参数,可以接收所有子类对象

多态的弊端:不能使用子类的特有功能

4.多态中的转型:

若强行用子类的功能则需要进行类型转换,向上转型和向下转型

向上转型:从子到父(父类引用指向子类对象

向下转型:从父到子(父类引用转为子类对象)cat a = (cat) m;

强制类型转换可以把对象转换为真正的子类类型,从而调用子类独有的功能

强转的时候可以使用instanceof 关键字进行判断

5.final修饰符

 6.权限修饰符

7.抽象方法:

抽象类:假如我们定义动物类给吃吃东西方法,但是不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。这样动物类就是一个抽象类(用abstract关键字修饰)

 

 

 

 

抽象类的子类,要么是抽象类,要么重写抽象类中的所有抽象方法

抽象类不能直接实例化那么,抽象类如何实例化呢?  

 答案:我们可以按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?    

答案是:用于子类访问父类数据时的初始化

成员变量:既可以是变量,也可以是常量。

构造方法:有, 用于子类访问父类数据的初始化。

成员方法:既可以是抽象的,也可以是非抽象的。

抽象类的成员方法特性:                                                                                    抽象方法 : 强制要求子类做的事情。
非抽象方法: 子类继承的事情,提高代码复用性。

abstract不能和哪些关键字共存?

private    ,final      冲突               static     不能共存,没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值