1 子类的方法将父类中的覆盖了,所以不会进入父类,而是根据实际类型找到对应的类,执行其相应的方法,子类将父类方法进行了重载
注意:
次动态绑定适用的是父类所固有的方法,子类对父类固有方法进行重载,如object中的toString()方法,例如A11—6
但是如果是用户自定义的方法,则是先调用父类中的方法,例如Faculty
执行子类方法
package chapter11;
public class A11_6 {
public static void main(String[] args) {
m(new GraduateStudent());
m(new Student());
m(new Person1());
m(new Object());
}
public static void m(Object x)
{
System.out.println(x.toString());
}
}
class GraduateStudent extends Student
{
}
class Student extends Person1
{
public String toString()
{
return "Student";
}
}
class Person1 extends Object
{
public String toString()
{
return "Person";
}
}
先调用父类的
package chapter11;
public class Faculty extends Employee {
public static void main(String[] args) {
new Faculty();
}
public Faculty()
{
System.out.println("(4)Perfors faculty tasks");
}
}
class Employee extends Person
{
public Employee()
{
this("(2)this is a bad news!");
System.out.println("(3)this is a good news!");
}
public Employee(String s)
{
System.out.println(s);
}
}
class Person{
public Person()
{
System.out.println("(1)we should ignore some bad news!");
}
}
2 对象转换的应用
对象成员访问运算符(.)优先于类型转换运算符,必须使用()保证点运算符之前进行转换,例如
((Circle)object).getArea());