目录
2.1.多态例子练习多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象这时候就需要强制类型转换
1.1为什么使用多态,此为没有使用多态的情况
package Polymorphism;
/**
* @author zhao xuke
*
*1.继承、重写、父类的引用指向子类
*2.编译时类型(一般是个父类)由声明时的类型决定
*3.运行时类型(运行时具体是哪个子类就是哪个子类) 由实际对应对象类型决定
*4.多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象
*5.数据类型的转换 ;
* 5.1.基本数据类型的转换
* 自动类型转换; 小数据类型 转为 大数据类型 int->float
* 强制类型转换: 大数据类型 转为 小数据类型 float->int
* 5.2.引用(系统)数据类型转换
* 自动类型转换: 小数据类型 转为 大数据类型 子类->父类 Father f = new Son();
* 强制类型转换: 大数据类型 转为 小数据类型 父类->子类 Father f = new Son(); Son s = (Son)f;如果这
* 不强转就会与要点4矛盾,并抛出ClassCastException表示强转类型转换失败
*6.1 注意: 引用数据类型的转换是建立继承的基础上,如果两个类没有继承关系,那么强转的话会报错
*6.2 进行强制类型的转换(父类->子类 即 Son s = (son)f;)之前父类的引用已经指向了子类
*7.父类的引用指向子类的对象情况有
* 1. 父类对象做形参子类对象做实参
* 2. Father f = new Son();
* Son s = (Son)f;
*
* 3. Son s = new Son();
* Father f = s;
* son s1 =(Son)f;
* 4. Father f = new Father();
* Son s = new Son();
* f = s; // 此为父类的引用指向子类的对象
* Son s1 = (son)f;
*
* 2018年4月12日 - 下午1:26:29
*/
public class Animal {
public void printVoice(){
System.out.println("动物的叫声");
}
}
class Dog extends Animal{
public void printVoice(){
System.out.println("旺旺");
}
}
class Cat extends Animal{
public void printVoice(){
System.out.println("喵喵");
}
}
class Pig extends Animal{
public void printVoice(){
System.out.println("哼哼");
}
}
package Polymorphism;
/**
* @author zhao xuke
*
* 2018年4月12日 - 下午1:29:28
*/
public class Test {
public static void testPrintVoice(Dog d){
d.printVoice();
}
public static void testPrintVoice(Cat c){
c.printVoice();
}
public