一个对象只能属于一种确定的数据类型,该类型自对象创建直至销毁不能改变。
一个引用类型变量可能引用(指向)多种不同类型的对象—既可以引用其声明类型的对象,也可以引用其声明类型的子类的对象。
例5.7 多态性使用举例2
public class Test{
public void show(Person p){
System.out.println(p.getInfo());
}
public static void main(String[] args){
Person p=new Person();
Student s=new Student();
Test t=new Test();
t.show(p); ? t.show(s); ?
}
}在多态情况下,一个引用类型的变量如果声明为父类的类型,但实际引用的是子类对象,则该变量就不能访问子类中添加的属性和方法。可是如果此时调用的是父类中声明过,且在子类中又重写过的方法,情况又将如何?public class TestNovel{
public void process(Book b){
b.show();
}
public static void main(String[] args){
TestNovel t=new TestNovel();
Book b=new Book(); b.setName(“English Language”);
b.setPrice(34);
t.process(b); //方法体中的b.show()输出结果?
}
}
一个引用类型变量可能引用(指向)多种不同类型的对象—既可以引用其声明类型的对象,也可以引用其声明类型的子类的对象。
例5.7 多态性使用举例2
public class Test{
public void show(Person p){
System.out.println(p.getInfo());
}
public static void main(String[] args){
Person p=new Person();
Student s=new Student();
Test t=new Test();
t.show(p); ? t.show(s); ?
}
}在多态情况下,一个引用类型的变量如果声明为父类的类型,但实际引用的是子类对象,则该变量就不能访问子类中添加的属性和方法。可是如果此时调用的是父类中声明过,且在子类中又重写过的方法,情况又将如何?public class TestNovel{
public void process(Book b){
b.show();
}
public static void main(String[] args){
TestNovel t=new TestNovel();
Book b=new Book(); b.setName(“English Language”);
b.setPrice(34);
t.process(b); //方法体中的b.show()输出结果?
}
}