多态

 

class Mammal{}
class Dog extends Mammal{}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
//d=m;错误
d=(Dog)m;//正确
//d=c;错误
m=c;
c=(Cat)m;//正确

}
}

子类对象可以直接赋给基类变量。

基类对象要赋给子类对象变量,必须执行类型转换,其语法是: 子类对象变量=(子类名)基类对象名;


 

public class ParentChildTest
{
public static void main(String[] args)
{
Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue();

parent=child;
parent.printValue();

parent.myValue++;
parent.printValue();

((Child)parent).myValue++;
parent.printValue();

}
}

class Parent
{
public int myValue=100;
public void printValue()
{
System.out.println("Parent.printValue(),myValue="+myValue);
}
}
class Child extends Parent
{
public int myValue=200;
@Override
public void printValue()
{
System.out.println("Child.printValue(),myValue="+myValue);
}
}

 

总结:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。 这个特性实际上就是面向对象“多态”特性的具体表现。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。 如果子类被当作父类使用,则通过子类访问的字段是父类的

 

 

使用多态最大的好处是:在编程中应用多态,可以使我们的代码具有更强的适用性。当需求变化时,多态特性可以帮助我们将需要改动的地方减少到最低限度。

 

 

posted @ 2022-10-15 19:25  Men!  阅读(31)  评论(0)    收藏  举报