JAVA面向对象(多态,抽象类)

JAVA面向对象(多态,抽象类)

多态:同一个对象(事物),在不同时刻体现出来不同的状态
多态的前提:
  • 要有继承关系
  • 要有方法重写(没有也可以,但是就没有意义了)
  • 要有父类引用指向子类对象:父 f = new 子();
多态中的成员访问特点:
  • 成员变量
    • 编译看左边,运行看左边(左右边指:父 f = new 子()的左右变 )
  • 构造方法
    • 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
  • 成员方法

    • 编译看左边,运行看右边
    • (由于成员方法存在方法重写,所以他运行看右边)
  • 静态方法

    • 编译看左边,运行看左边
    • (静态和类相关,算不上重写,所以,访问还是左边的)
多态的好处:
  • 提高了代码的维护性(继承保证)
  • 提高了代码的扩展性(由多态保证)
多态的弊端:
  • 不能使用子类的特有功能

怎么用呢?

  • 创建子类对象调用方法即可(可以,但是很多时候不合理,而且太占内存了)
  • 把父类的引用强制转换为子类的引用(向下转型 )
对象转换问题
  • 向上转型:

    Fu f = new Zi( );(从子到父)

    父类引用指向子类对象

  • 向下转型:

    Zi z = (Zi) f;(从父到子 )

    父类引用转为子类对象

抽象类特点

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

  • 抽象类和抽象方法必须用abstract关键字修饰.eg:abstract class 类名 {}

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

  • 抽象类不能实例化(如何实例化呢:按照多态的方式,有具体的子类实例化,这也是多态的一种,抽象类多态)
  • 抽象的子类要么是抽象类,要么重写抽象类中所有的抽象方法
抽象类的成员变量特点
  • 成员变量可以是变量法,也可以是常量
  • 构造方法

    • 有构造方法,但是不能实例化
    • 构造方法作用:用于子类访问父类数据的初始化
  • 成员方法

    • 有抽象方法,强制要求子类做的事情(不复写会报错)
    • 也有非抽象方法,子类继承的事情,提高代码复用性
abstract不能喝哪些关键字共存
  • private 冲突(私有不能被继承,而抽象就是要被继承后重写)
  • final 冲突(被final修饰后不能改变,故不能被重写)
  • static 无意义(静态方法可以用类名调用,但是抽象方法中没有方法体,)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值