Java多态

本文详细介绍了Java中的多态性,包括编译时类型与运行时类型的区别,以及如何通过向上转型实现多态。强调了在多态中,方法调用体现子类行为,而实例变量不具有多态性。同时,讨论了引用变量的强制类型转换和类型转换运算符的使用。此外,还对比了继承与组合在类复用中的优缺点,强调了封装原则,并给出了设计良好父类的一些建议。最后,提到了在编程实践中如何根据需求选择继承或组合来实现类复用。
摘要由CSDN通过智能技术生成

1.概述,

1.Java引用变量有两个类型,一个是编译时类型,一个是运行时类型。
2.编译时类型由声明该变量时使用的类型决定
3.运行时类型由实际赋值给该变量的对象决定
4.编译时类型和运行时类型不一致,就可能出现多态
5.父类引用指向子类对象(将子类对象赋值给父类引用变量)时,编译时类型为父类,运行时类型为子类,运行时调用该引用变量方法时,方法形式总是表现出子类方法的行为特征,而不是父类方法的行为特征,所以就会出现,相同类型的变量,调用同一个方法时,呈现出不同的行为特征,这就是多态
6.与方法不同的是,实例的变量不具有多态性,访问的变量依旧是父类的实例变量

2.向上转型

1.子类是特殊的父类。Java允许把一个子类对象直接赋值给父类引用变量,无须任何类型转换,成为向上转型,向上转型自动完成

3.引用变量的强制类型转换

1.引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法
2.如果需要引用变量调用运行时类型的方法,可以强制类型转换为运行时类型,强制类型转换借助类型转换运算符()小括号

4.类型转换运算符

1.可以将一个基本类型变量转换成另一个类型
2.将一个引用类型变量转换成子类类型
3.基本类型之间的转换只能在数值类型之间转换,数值型(整型、字符型、浮点型)数值型和布尔型之间不能转换
4.引用类型之间转换只能在具有继承关系的两个类型之间进行转换

5.组合与继承

1.继承是实现类复用的重要手段
2.继承有一个最大的缺点是:破坏封装
3.组合也可以实现类复用,而且采用组合方式来实现类复用可以提供更好的封装
4.子类扩展父类,子类可以从父类继承得到成员变量和方法,如果访问权限允许,子类可以直接访问父类成员变量和方法,造成子类和父类的严重耦合
5.封装:每个类都应该封装它内部信息和实现细节,向外提供必要的方法给其他类访问。
6.为了保证父类具有良好的封装原则,不会被子类随意篡改,设计父类应该遵循一下规则
	6.1	尽量隐藏父类的内部信息,尽量把父类所有成员变量设置成private访问类型,不要让子类直接访问到父类变量
	6.2	不要让子类可以随意访问、修改父类的方法,除父类中工具方法外,
	6.3	使用private访问控制修饰符,让子类无法访问该方法
	6.4	使用public访问修饰控制符修饰必须要被外部类调用的方法
	6.5	使用fianl修饰符修饰不希望让子类重写的方法
	6.6	使用protected修饰,希望父类中的某个方法被子类重写,而不被其他类自由访问
7.复用一个类,除了把这个类当作基类(父类)外,还可以把该类当作另一个类的组合部分。从而允许新类直接复用该类的public方法
8.组合是把旧类对象当作新类的成员变量组合进来,用来实现新类的功能。,
9.通常在新类里使用private修饰被组合的旧类对象
10.继承要表达的是 is -a的关系 组合是表达 has -a的关系

6.注意

1.引用变量在编译阶段,只能调用其编译时类型所具有的方法,但运行时执行它运行时类型所具有的方法
2.因此,引用变量只能调用声明该变量时所用的类里包含的方法,例如 Object obj  = new Person();定义一个obj变量,这个obj变量只能调用object类的方法Object类所包含的方法,不能调用Person类所包含的方法
3.通过引用变量来访问其包含的实例变量时,总是 访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值