java048多态的概述和实现及多态的成员特点及习题练习
1.多态的前提:
a.子父类的继承关系
b.方法的重写
c.父类应用指向子类对象
例:
public class PoymorphicDemo{
public static void main(String [] args){
父类引用:Animal a
指向: =
子类对象:new Cat()
Animal a = new Cat();
a.eat( );
}
}
class Animal {
public void eat( ) {
Syatem.out.println("吃东西");
}
}
calss Cat extends Animal(
public void eat( ) {
System.out.println("猫吃鱼");
}
}
运行结果是猫吃鱼,这叫动态绑定:指运行期间的调用是根据其具体的类型决定的。
2.多态成员的特点
a.成员变量:编译时看的是父类,运行时看的也是父类,因为变量是没有重写的概念的。
b.成员方法:编译时看的是父类,运行时看的是子类,是具体的对象。(动态绑定)
c.静态方法:编译时看的是父类,运行时看的也是父类
例:Dad d = new kid();
d.function( );//使用变量去调用方法,其实相当于变量类型的类名去调用,即d变量的类名Dad去调用,所以就得到了运行时看的也是父类
![](https://img.haomeiwen.com/i14279056/6e32bff3c0d4d7c4.jpg)
int s=(i++)+(++i)+(i--)+(--i);
int s = (5)+(++6)+(7--)+(--6)
=5+7+7+5
=24;
![](https://img.haomeiwen.com/i14279056/2b466a346002a232.jpg)
X值为4,当传入时,进入case 4 J++之后,没有break关键字,所以继续顺序执行,将 5 和default都执行完 J的值也为4 所以结果为8。
![](https://img.haomeiwen.com/i14279056/e6ac1d58c32a481f.jpg)
执行顺序如下:
静态代码块 构造代码块 构造函数 main()
所以结果是B。
先初始化静态变量x=10;//x=10
执行第一个静态代码块,x=x+5; //x=15
执行第二静态代码块 x=x/3; //x=5
执行主方法: 输出x=5
在类中定义的{}之间被称为构造块,构造块相对于构造方法先执行,构造块之间按照代码编译顺序执行