1.多态【重要】
java面向对象的三大特性:封装 继承 多态。
封装:对属性进行封装;
继承:子类继承父类;
多态:方法和对象具有多种形态。
1.1方法的多态
方法的重写和方法的重载就是方法的多态。
1.2对象的多态【重点】
1.一个对象的编译类型和运行类型可以不一样;2.编译类型在定义对象的时候,就确定了不能改变;3.运行类型是可以改变的;4.编译类型看定义在等号(=)左边的,运行类型看等号(=)右边的;5.父类的引用指向子类的对象(父类的引用不能调用子类独有的方法)
注意事项:
父类的引用指向子类的对象:
1.一定要有继承和重写;2.=左边是父类的引用,=右边是子类的对象
案例在开发中的具体应用【重点】
package com.qfedu.test1duotai;//多态练习题2public class Test2 {public static void main(String[] args) {Mannger mannger = new Mannger();PersonQF personQF = new Student();mannger.manage(personQF);PersonQF personQF2 = new Teacher();mannger.manage(personQF2);mannger.manage(new Emoployee());}}class PersonQF{public void excute() {//执行System.out.println("千峰手册");}}class Student extends PersonQF{//学员public void excute() {//执行System.out.println("学生手册");}}class Teacher extends PersonQF{//讲师public void excute() {//执行System.out.println("学生手册");}}class Emoployee extends PersonQF{//员工public void excute() {//执行System.out.println("员工手册");}}class Mannger{//管理(manage)学生、讲师、员工public void manage(PersonQF personQF) {personQF.excute();}}
1.3.1多态的向上转型
本质:父亲的引用指向子类的对象
语法格式:父亲类型 引用名 = new 子类的引用();
总结:向上转型,只能调用父类有的方法,不能调用子类独有的方法
1.3.2多态的向下转型
语法格式:子类类型 引用名 = (子类类型)父类的引用;
大转小,需要强转。只能强转父类的引用,不能强转父类的类型
注意事项:一定先向上转型,在进行向下转型。如下
Animal animal = new Cat();Cat cat = (Cat)animal;cat.run();
案例:
package com.qfedu.test1duotai3;//多态的向下转型public class Demo1 {public static void main(String[] args) {//向下转型//子类类型 引用名 = (子类类型)父类的引用;// Animal animal = new Animal();//错误演示// Cat cat = (Cat)animal;// cat.run();Animal animal = new Cat();Cat cat = (Cat)animal;cat.run();cat.catchMouse();Animal animal2 = new Dog();Dog dog = (Dog)animal2;dog.run();}}class Animal{public void run() {System.out.println("动物会奔跑");}}class Cat extends Animal{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("猫走猫步");}public void catchMouse() {System.out.println("猫抓老鼠");}}class Dog extends Animal{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("狗跑的飞快");}}
1.4instanceOF 关键字【现在已经不用了】
比较操作符,返回值是一个布尔类型boolean
用于判断对象的对象的运行类型 (=右边) 是否是XX类型或者XX类型子类,目的是强转不出错
语法格式: 对象的引用 instanceOF 运行类型
package com.qfedu.test1duotai3;public class Demo2instanceOF {public static void main(String[] args) {BB bb = new BB();//语法格式: 对象的引用 instanceOF 运行类型//判断bb是否是类的类型或者这个类的子类类型System.out.println(bb instanceof BB);//bb这个对象 判断它是否是AA的子类类型//因为BB继承了AASystem.out.println(bb instanceof AA);AA aa = new BB();System.out.println(aa instanceof BB);System.out.println(aa instanceof AA);AA aa1 = new AA();System.out.println(aa1 instanceof BB);//FSystem.out.println(aa1 instanceof AA);System.out.println("-------------------");Object object = new Object();System.out.println(object instanceof AA);System.out.println(object instanceof Object);String string = "zzw";System.out.println(string instanceof Object);}}class AA{}//父类class BB extends AA{}//子类
