一个对象只能有一种确切的数据类型
一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。
public class Test4 {
public int score;
public String name;
}
class Test41 extends Test4{
public int age;
public int classnum;
}
main里边是
Test4 t41=new Test41();
t41.age=10;
果然出错。我知道这样子不能调出age。但我知其然不知期所以然,麻烦各位前辈给点指点,谢谢。还想请问一下,上转型下转型,是什么意思?
最后用一个程序来阐明前面的观点[code=java]class BaseClass
{
public int book = 6;
public void base()
{
System.out.println("父类的普通方法");
}
public void test()
{
System.out.println("父类的被覆盖的方法");
}
}
public class SubClass extends BaseClass
{
//重新定义一个book实例属性覆盖父类的book实例属性
public String book = "定义一个book实例属性覆盖父类的book实例属性";
public void test()
{
System.out.println("子类的覆盖父类的方法");
}
public void sub()
{
System.out.println("子类的普通方法");
}
public static void main(String[] args)
{
//下面编译时类型和运行时类型完全一样,因此不存在多态
BaseClass bc = new BaseClass();
//输出 6
System.out.println(bc.book);
//下面两次调用将执行BaseClass的方法
bc.base();
bc.test();