final关键字及多态(polymorphism)

final关键字

final关键字修饰的变量 称为常量,自定义常量提高了程序的可读性

final特点

  1. final可以修饰类、成员变量、成员方法以及局部变量
  2. final修饰类不能够被子类继承
  3. final修饰的变量表示常量
    常量不能够被二次赋值
     final修饰成员变量:必须在声明的同时赋值;
     final修饰局部变量:可以先声明再赋值
  4. final修饰的成员方法不能被子类继承

多态(polymorphism)

多态概述:同一个引用类型,使用不同的实例而执行不同操作,即父类引用指向子类对象。

使用多态的3个前提条件:

  1. 一定要有继承关系
  2. 存在方法重写
  3. 父类引用指向子类对象

使用多态访问成员的特点

成员变量:编译看左,运行看左;
成员方法:编译看左,运行看右;
静态成员:不存在重写,不构成多态,直接使用类名.调用
构造方法:限制性父类的构造方法,可以帮我们初始化父类继承过来的成员,再执行子类

花木兰替父从军
花木兰替父亲花弧从军打仗,花弧有自己的姓名等信息(成员变量),有自己的打仗方法(成员方法),花木兰虽然有自己的信息,但同时也从父亲那里继承了他的信息,并且木兰有属于自己的打仗方法。木兰在战场上使用的是自己父亲花弧的信息,也就是外界知道他叫花弧。当打仗时候外界调用花弧的打仗方法,实际上是使用了木兰自己的打仗方法。除此以外,木兰作为女性还有自己的梳妆打扮这样的特有的方法,在战场上不能使用,打仗之后该怎么使用?这样就涉及到转型。

抽象类

某些继承的时候父类被继承的方法毫无存在意义,但是因为要实现重写就必须存在,因此可以引入抽象方法的概念
抽象方法,使用abstract修饰,无方法体(大括号也不需要),结尾需要使用;表示结束
有抽象方法的类必须定义为抽象类

抽象类的特点

  1. 抽象方法和抽象类使用abstract修饰
  2. 有一个抽象方法的类必须是抽象类
  3. 抽象类中不一定要有抽象方法
  4. 抽象类不能被创建对象,因此没有抽象方法的抽象类可以用作放置外界创建对象
    防止外界创建对象的方法有:
       私有构造方法
       抽象类
       接口
       内部类
  5. 抽象类不能被实例化–利用子类
  6. 抽象类子类的特点:
    如果子类想要继承抽象类,就必须实现抽象类中所有的抽象方法
    如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类
  7. 抽象类和普通类的区别
    抽象类中可以有成员变量,成员方法,构造方法,静态方法,常量? 有的话又有什么意义呢?
    成员变量 --> 给子类使用
    成员方法 --> 给子类使用
    构造方法 --> 帮助子类初始化父类继承下来的成员
    静态方法 --> 直接通过类名访问,防止以创建对象这种不建议的方式访问
    常量 --> 方便访问
    抽象类和普通类没有区别,只不过是抽象类多了抽象方法而已

抽象类的抽象方法强制子类重写
非抽象方法直接给子类使用
构造方法和成员变量直接给子类使用


抽象类是一个彻头彻尾的服务类,服务于所有的子类

  1. 抽象类的成员一般使用 public 或者 protected
  2. private final static native 均不可以用来修饰抽象方法
  • private修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
  • final修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
  • static修饰的方法一般方便调用,一般都是用来实现功能的,抽象方法没有方法体,二者没有意义
  • native修饰的方法不是Java实现的,有方法体,抽象方法没有方法体,二者没有意义

猜你喜欢

转载自blog.csdn.net/hcwdd/article/details/89415767
今日推荐