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关键字来访问它。 如果子类被当作父类使用,则通过子类访问的字段是父类的
使用多态最大的好处是:在编程中应用多态,可以使我们的代码具有更强的适用性。当需求变化时,多态特性可以帮助我们将需要改动的地方减少到最低限度。
标签:parent,子类,多态,printValue,myValue,父类,public From: https://www.cnblogs.com/mendianyu/p/16794852.html