java —–多态

生活中的人物视角

java —–多态

程序中的多态

概念:父类引用指向子类对象,从而产生多种形态

 

比如:dog继承了animal

java —–多态

 

怎么来理解这句代码的意思呢?

举一个例子:

short s = 10;

int num = s;

这两行代码的意思是:创建了个s变量,short类型的占2个字节,然后我们把s这个变量传递给了num,num这里是int类型的,占了4个字节 ,两行代码是可以正常运行的

我们想通过这两行代码表达的意思是:我们从小范围的数据传递给大范围的数据是不会出错的

这里的Animal是dog的父类,范围要比dog的范围大,所以这句代码是可以运行的

 

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

 

如果子类重写了父类的方法,那么在调用方法时,调用的是子类的重写的方法:官方话:实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行子类中的方法

 

多态的使用场景

 

场景一:使用父类作为方法形参实现多态

java —–多态

上面的省略的代码,都可以调用这么一块语句完成

 

场景二:使用父类作为方法的返回值实现多态,使方法可以返回不同的子类对象

java —–多态java —–多态

 

 

向上转型(装箱):

Animal a = new Dog();

父类引用中保存真实的子类对象
 

java —–多态

把Dog转化成Animal

 

向下转型(拆箱):

比如我们用父类对象 创建了一个子类对象。父类对象只能调用父类的方法和对象以及子类中重写的方法,怎么办呢?我们想调用子类的对象

java —–多态

我们将a强转为子类对象,就可以调用子类的对象和方法了

 

向下转型的条件:先存在向上转型:Animal a = new Dog();才有后面的向下转型。向下转型必须转化为原来的类型

 

思考:在向下转型的时候如何判断出当前的类型呢?你怎么知道他原来的类型呢?这里就引出了Instance of关键字

引用 instance of 类型 // 返回布尔类型结果

java —–多态

 

总结:

父类引用指向子类的对象,从而产生多种形态。把子类当成父类来看

使用父类作为方法的形参,实现多态(喂养的方法)

使用父类作为方法返回值,实现多态(购买动物的方法)

 

Java多态的三个必要条件:

1、 继承

2、 子类重写父类方法

3、 父类引用指向子类对象

 

 

未分类
匿名

发表评论

匿名网友