1.多态释义
多态是指同一操作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的结果,也就是,相同的语句在不同的运行环境中可以产生不同的运行结果。开奖网源码搭建QQ:2152876294 网址diguaym.com
多态的本质特征就是父类(或接口)变量可以引用子类(或实现接口的类)对象,也就是子类对象可以被当做基类对象使用。
Parent p=new Child1();
Parent p=new Child2();
1
2
总是可以让更一般的对象容纳更具体的对象
子类与基类间的赋值:
子类对象可以直接赋给基类变量,但是基类对象要想赋给子类变量必须执行类型转换,语法为:
子类变量=(子类名)基类对象名;
1
这种转换失败会抛出ClassCastException异常。通过instanceof判断对象是否可转换为指定类型。
下面代码便于理解类型转换:
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent parent=new Parent();
parent.printVal();//100
Child child=new Child();
child.printVal();//200
parent=child;
parent.printVal();//200,调用子类方法
parent.val++;//父类字段
System.out.println(parent.val);//101
parent.printVal();//200,子类方法
((Child)parent).val++;//子类字段
parent.printVal();//201//子类方法
}
}
class Parent{
public int val=100;
public void printVal(){
System.out.println("Parent.printVal,val="+val);
}
}
class Child extends Parent{
public int val=200;
public void printVal(){
System.out.println("Childs.printVal,val="+val);
}
}
总结一下输出这样结果的原因:
1.子类与父类有同名方法时:
一个父类变量引用一个子类对象时,具体调用哪个方法由对象”真实”类型决定,就是说,对象是子类型就调用子类型方法,是父类型就调用父类型方法。
2.子类父类具有同类型同名字段时:
子类字段会隐藏父类字段,子类方法访问的是子类字段(而不是父类字段)。如果子类确实想访问父类字段,可以用super关键字访问。
但如果子类被当做父类使用,即父类变量名子类对象,则访问的字段是父类的。