废话不多说,看代码.
public class a2 extends a1{
public void aa(){
System.out.println("a2的方法");
}
public static void main(String []args){
a2 t =new a2();
a1 t2  = new a2();  //这句话是什么意思,作用是什么.
t2.aa(); //这句我理解,就是调用a2的方法.
a1 t3 = (a1) t; //这句又是什么意思,作用是什么.
t3.aa();//这句又是调的哪个方法呢?
}
}
class a1{
public void aa(){
System.out.println("a1的方法");
}
public static void main(String[]args){
a1 t = new a1();
t.a1();
}
}
新人新手,实在不理解,请各位大侠给帮忙详细解答解答.不胜感激~~~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    a1 t2  = new a2(); //声明了一个common的对象指针指向了一个special的对象
    a1 t3 = (a1) t; // 把一个common的对象转换为一个special的对象
    t3.aa();// 方法调用看创建时候的对象是哪个类(也就是new 后面的类是什么) 属性则看调用时的对象是 属于哪个类的。 这里就是a2的方法。
      

  2.   

    //这句话是什么意思,作用是什么.
    回答:这是多态性的体现 作用就是可以使你的程序更为通用。
     a1 t3 = (a1) t; //这句又是什么意思,作用是什么.
    回答:将 子类向上转型到父类的类型、
     t3.aa();//这句又是调的哪个方法呢?
    回答:由于被向上转型为父类类型,所以调用的是父类的方法
      

  3.   


    public class a2 extends a1{
        public void aa(){
            System.out.println("a2的方法");
        }
        public static void main(String []args){
            a2 t =new a2();//new一个类型为a2的对象t
            a1 t2  = new a2();  //new一个类型为a1的对象t2
            t2.aa(); //这行是调用对象t2的aa方法,t2的类型是a1,打印出来的应该是"a1的方法"
            a1 t3 = (a1) t; //t3是转换成a1类型的对象t
            t3.aa();//既然现t3的类型是a1,调用的当然是class a1的方法
        }
    }
    class a1{
        public void aa(){
            System.out.println("a1的方法");
        }
        public static void main(String[]args){
            a1 t = new a1();
            t.a1();
        }
    }
      

  4.   

    楼上的,
    a1 t2  = new a2(); 
    一个是a1类里的变量t2 ,让他指项a2 new出的的内存空间,是这意思吗?这有意思吗?
      

  5.   

    public class a2 extends a1 //相当于说 苹果(a2) extends 水果 (a1,因为苹果是一种水果)a1 t2  = new a2(); //也就是说: 水果 苹果甲 = new 苹果 (苹果是一种水果,所以可以放进水果这个变量)a1 t3 = (a1) t; //注意之前定义t为一个苹果,这里将这个苹果放进‘水果‘这个变量,正常讲 苹果只应该放在苹果变量里,但苹果也是水果,所以苹果也可以放在水果变量里。t3.aa(); //这里调用的是苹果的方法,因为t3虽然是水果(a2),但多态的功能让java知道去调这个变量里真正的对象(就是那个苹果)的方法。
      

  6.   

    a2的方法
    a2的方法
      是有重名的方法
    还有这里里面 t.a1 是不能用的。 静态方法不允许调用非静态的方法和属性
    class a1{
        public void aa(){
            System.out.println("a1的方法");
        }
        public static void main(String[]args){
            a1 t = new a1();
            t.a1();
        }
    }
      

  7.   

    楼上的各位大侠:a1 t2  = new a2();这个我理解了,就是让a1的t2这个变量在内存里指向  a2 的实例变量.
    但是a2是继承了a1,可以说a1里有的,a2里都有,甚至比a1里的要多的多,那么为什么不写成 a1 extends a2
    更好呢?而要用 a1 t2  = new a2(); 语句呢? 这样写有什么实际意义和好处呢?
      

  8.   

    回楼上的,大家注意注意:
    1楼贴,a1最后是 t.aa(),我敲的时候敲错了~~~~~~
      

  9.   

    如果a1有更多的子类呢? 你始终可以用a1的变量去接 无限个a1子类的引用,这样很通用
      

  10.   

    例如:
    在集合里面 
    Collection c= new ArrayList();这个c 可以应用个种不同的集合一样。可以方便的适用各种数据类型。
        
      

  11.   

    举个例子 我们使用某个对象一般来说是因为这个对象具有某种功能,实现了这种功能的对象会有很多。(继承,实现)但是接口定义上面,我们可以只用这种功能接口作为参数,这样所有的实现了这种功能的类就都可以传递进去。例如:
    method1(a2 param) {
    }
    method2(a1 param) {
    }
    定义成接口method2的好处就是,无论有多少子类扩展了a1,这个方法都不用修改。定义成接口1就需要每次增加新的子类,就必须增加一个方法。
      

  12.   

          a1 t2  = new a2();  //这是创建对象t2
            t2.aa(); //这是调用a2的方法aa
            a1 t3 = (a1) t; //这里应该是强转t为a1的类型
            t3.aa();//用t3去点a2的方法aa
      

  13.   

                                 dwada  
      

  14.   

    我用一个类覆盖了Object的toString方法,再用Object转型,却什么都没输出,public class a2 extends Object{
       public String toString(){
           return "za";
       }
        public static void main(String []args){
            a2 t =new a2();
            Object t3 = (Object) t;         
            t3.toString();   }
    }
    它用的不是a2的toString。
    搞不懂,可以确定的是a1 t3 = (a1) t;转型并不成功。
    期待讨论中
      

  15.   

    public class a2 extends a1    类a2继承a1   a1 t2  = new a2()   父类 a1   新建一个子类对象  这里运用了多态   父类的引用指向了子类
      

  16.   

    一个void 的toString()能输出什么来。