Person a=new Son();其中Person是父类,Son是子类。Son s1=(Son) a;其中涉及到了类型强转,请解释一下
时间: 2024-04-07 12:31:35 浏览: 65
在Java中,类的继承关系可以用父类和子类来表示,子类是父类的一个特殊实现。在这个例子中,a是Person类型的变量,它被赋值为一个Son类型的对象。这是因为Son是Person的子类,所以Son类型的对象可以被赋值给Person类型的变量。
但是,由于a被声明为Person类型的变量,它只能调用Person类中定义的方法和属性,而不能调用Son类中定义的方法和属性。为了能够调用Son类中定义的方法和属性,需要将a强制转换为Son类型,即将Person类型的变量转换为Son类型的变量。
这里使用了强制类型转换,即将a强制转换为Son类型,赋值给s1变量。这样,s1就可以调用Son类中定义的方法和属性了。需要注意的是,如果a并不是一个Son类型的对象,强制类型转换会抛出ClassCastException异常。
相关问题
父类person子类son,可以直接person a ;利用a 来对person里面成员的运用吗
在面向对象编程中,子类可以继承父类的成员,包括属性和方法。如果你创建了一个子类 `Son`,并且它继承了父类 `Person`,那么你可以创建一个 `Son` 的实例,例如 `son = Son()`。
在这个实例中,你可以直接使用从父类继承的方法和属性,例如 `son.name` 可以访问到 `Person` 类中的 `name` 属性,同时你也可以调用 `Person` 类中的方法,例如 `son.say_hello()` 可以调用 `Person` 类中的 `say_hello()` 方法。
所以,如果你有一个 `Person` 类的实例 `a`,你也可以使用它来访问 `Person` 类中的属性和方法。例如,如果 `a` 是 `Person` 类的实例,你可以通过 `a.name` 来访问 `Person` 类中的 `name` 属性,或者通过 `a.say_hello()` 来调用 `Person` 类中的 `say_hello()` 方法。不过需要注意的是,如果 `Person` 类中的某个方法是被重写的,那么在子类 `Son` 的实例中调用该方法时,实际上会调用子类中的方法,而不是父类中的方法。
父类person里面成员有函数fux(),子类son,我可以在主函数里面写person a;a.fux( );来对person里面函数fux( )的调用吗
可以在主函数里面通过创建person类对象a并调用成员函数fux()来对person类里面的函数进行调用,但是对于子类son,如果son没有重写(fux)函数,则也可以通过创建son类对象b并调用成员函数fux()来调用父类person里面的fux()函数。如果son重写了fux()函数,则创建son类对象b并调用成员函数fux()会调用son类里面的fux()函数。
阅读全文