活动地址:CSDN21天学习挑战赛
一、方法的重载@override
1、子类的方法与父类的方法方法名,返回值类型,形参列表都一样,则会发生方法的覆盖。
注:不一定是直接父类,间接父类也是可以的。
2、还有一种情况:子类方法的返回值类型和父类方法的返回值类型是父类的子类。譬如String与object。此时也构成
3、发生重载时子类方法的权限等级不能比父类的小。
二、多态
1、为什么要多态?
同一类型的类的数量较多,对应的功能相同的方法也多了
例如:给动物喂食,不同的动物要喂不同的食物所以要创建不同的类,根据动物的类型,给动物吃的食物的类型,定义不同的方法,但喂食的逻辑是相同的,方法在功能上发生了重复,但按照当前的技术并不能进行合并,所以要引入多态。
2、什么是多态?
3、方法的多态:
方法的重载与方法的重写都体现了多态的原则中 的方法的多态。
4、对象的多态(核心):同一个父类的方法,可以根据实例化子类的不同也有不同的表现
(1)、对象的编译类型和运行类型可以不同
(2)、编译类型,定义后不能改变;运行类型可以改变。
编译类型决定编译过程,运行类型决定运行过程。
(3)、当对象调用方法时,根据当前的运行类型,决定当前的方法。
定义一个A类和A类的子类B类C类,则:
A a = new B;
上式A就是编译类型,B是运行类型
出现:a = new C;时,与上式不冲突。
5、多态的细节:
(1)、多态建立在封装和继承的基础上,正如继承建立在封装之上
(2)、多态的向上转型:A a = new B;其中A是父类,B是子类
向上转型:
可以调用父类中的所有成员(需遵守访问权限)。
不能调用子类中特有成员。
最终运行效果看子类的具体实现!
(3)向下转型 B b = (B) a;
向下转型:
向下转型解决的是向上转型中,不能调用子类中的特有方法的问题。
向下转型要求父类原先的运行类型就是被转的目标类型,如上式:a原本的引用类型是B,才能转。
可以调用子类的所有成员
6、动态绑定机制
(1)、java的方法有动态绑定机制,当调用方法时,会根据对象的运行类型绑定对象的类。 如:父类的某个方法需要调用一个已经被子类重写的方法时,假如对象运行类型时子类,会调用子类的方法。
(2)、属性没有动态绑定机制,会直接调用,被调用方法所在的类的同名属性。(没有就会报错)
7、一个逻辑运算符instanceof
对象名 instanceof 类名
判断前者是否是后者或其子类对象
三、多态的应用:
1、多态数组:
多个不同类的对象,可以放进一个最高父类的数组里。利用多态中的向上转型可以实现。
2、动态传参:
形参除用父类名。