Java 面向对象3——private、this与super关键字及多态
关键字
private关键字
- 是一个修饰符,可以用来修饰成员(成员变量或成员方法)
- 特点:属性私有(private),通过get/set方法获取
- 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用提供相应的操作
- 提供
get变量名()方法
:用于获取成员变量的值,方法用public修饰- 命名规则:get+单词首字母大写的成员变量名
- 返回值:成员变量名
- 提供
set变量名(参数)方法
:用于设置成员变量的值,方法用public修饰- 命名规则:set+单词首字母大写的成员变量名
- 返回值为
this关键字
- 是隐式参数,其修饰的变量用于指代成员变量
- 创建对象后,JVM就为该对象分配一个自身的引用this
- 主要作用:
- 区分局部变量和成员变量的重名问题
- 方法的形参若与成员变量同名,按就近原则,不带this修饰的变量指形参
- 方法形参不与成员变量同名,不带this的变量指成员变量
无论是否重名,引用成员变量时都使用this关键字
,程序更显专业
- 可通过其引用当前对象的成员变量、成员方法和构造方法
- 区分局部变量和成员变量的重名问题
- 使用:
- 引用成员变量:
this.成员变量名;
:指当前类的某个属性
- 引用构造方法:
this(参数列表);
:该语句必须是构造方法都第一条有效语句
- 引用成员方法:
this.成员方法名(参数列表);
:- 代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象
- 使用this关键字,还能能有效区分属性名是当前类还是父类的属性
this.name //当前类的name属性
- 引用成员变量:
this内存原理
this实现对象比较
- 比较两个同类不同对象是否相同,有两种判断方式:
- 对象的引用是否相同
- 对象的内容是否相同
static关键字
- 意为静态,可修饰成员变量、成员方法和代码块
- 修饰成员变量:称类变量或静态变量
- 此变量被该类所有对象共享,可用类名直接访问
static 数据类 成员变量名 //引用 类名.类变量
- 修饰成员方法:称类方法或静态方法
- 用类名直接访问
- 没有用static修饰的方法称实例方法
[修饰符] static 返回类型 方法名(参数列表){}
- 修饰代码块:称静态代码块
- 对象实例化时,其被执行一次
- 没有用static修饰都代码块称普通构造块
- 修饰成员变量:称类变量或静态变量
- 可在非静态方法中访问静态成员,但不能在静态方法中访问非静态成员
- 类方法仅能访问类方法和类变量
- 实例方法能访问类成员及实例成员
- 静态构造块能访问类成员
- static修饰的成员,既可用类来调用,也可通过对象调用
- 一般采用
类名.成员变量
,而不采用[对象.类名]- 静态成员变量是类成员,用类名引用更符合含义
- 一般采用
- 注意
- 可修饰类中成员变量,但不能修饰局部变量
- 静态成员是类成员,即无需实例化就存在
super关键字
- 类似于
this
关键字,不同的是:super是指父类,使用其可调用父类构造方法- 但必须是构造方法的第一句
super.name //父类的name属性
- 只能出现在子类的方法中
- 不能出现在静态方法或静态语句块中
- 不能和
this
同时调用构造方法
super与this的区别
- 表示不同:
- this:代表本类对象的引用
- super:代表父类存储空间的标识
- 使用不同:
- 成员变量
- this.成员变量:访问本类成员变量
- super.成员变量:访问父类成员变量
- 成员方法:
- this.成员方法:访问本类成员方法
- super.成员方法:访问父类成员方法
- 构造方法:
- this(…):访问本类构造方法
- super(…):访问父类构造方法
- 成员变量
多态
- 是同一个行为具不同表现形式或形态能力,即对象多种表现形式的体现
- 指程序中定义的引用变量所指向的具体类型和通过该引用变量出发的方法调用在编程时并不确定,运行时才确定
- 方法多态
- 同一方法可据对象不同而采用多种不同的行为方式
- 一个对象的实际类型确定,但可指向对象的引用类型有很多
- 以此实现动态编译
存在条件
- 有继承关系
- 子类重写父类方法,执行子类方法
- 父类引用指向子类对象
- 对象多态:不同对象对同一消息做出不同的响应
- 即,同一消息,据对象不同而采用多种不同的行为方式
- 实现条件:
- 继承关系
- 重写方法
- 父类对象引用子类实例
- 分类
- 编译时多态:也称静态多态
- 编译时,Java系统据参数列表不同区分不同的方法
- 方法重载是编译时多态
- 运行时多态:也称动态多态
- 程序执行阶段,Java系统确定调用哪个对象的方法
- 对象多态是运行时多态
- 编译时多态:也称静态多态
- 作用:
- 可替换性:对已存在代码具可替换性
- 可扩充:增加新的子类,不影响已存在类的多态性和继承性,及其他特性的运行和操作
- 接口性:多态是超类通过方法签名,向子类提供了一个共同接口,由子类完善或覆盖而实现
- 灵活性:多态在应用中体现了灵活多样的操作,提高了使用效率
- 简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要
- 消除类型间耦合
- 成员访问特点:
- 成员变量:编译看父类,运行看父类
- 成员方法:编译看父类,运行看子类
- 父类与子类间可类型转换
- 但有些不可行的转换,可能会报类型转换异常:ClassCastException
- 向上转型:父类引用子类对象
- 向下转型:子类引用父类对象
子类型 对象名 = (子类型)父类引用
instanceof
:引用类型- 类型转换:方便方法调用,减少重复代码
- 父类型转子类型,是高转低,需要强制转换
- 子类转父类,可能丢失一些自己的方法
- 优点:解耦合,增强可替换性、可扩展性、灵活性等