种的重写

类的重写

今天做了这样的一个测试,代码如下:

package com.yonge.myclass;

public class Test {

    public void print() {
        System.out.println("父类方法被调用!");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        Test test = new Test() {

            public void print() {
                System.out.println("子类的方法被调用!");
            }

            //The method print() from the type new Test(){} is never used locally
            /*public void method() {
                System.out.println("Method方法被调用!");
            }*/
        };
        test.print();
    }

}

上述代码中,test既然是Test对象的一个子类的实例,我觉得应该不仅仅只能重写父类方法,而且还应该具有自己的特性,例如,应该test对象可以调用method()方法,但是事实却不是如此,test不能调用method()方法,不知道问题出在哪儿,可能对test这个对象的概念还没有搞清楚,希望知道的回复一下,谢谢!!! 

1 楼 vial_z 2011-12-19  
楼主的意思不是很明白,
你new Test(){.....}的时候相当于定义了一个Test的无名称子类,Java是运行是绑定的,也就是说Test执行时,系统判定你调用了子类的print方法。可以通过以下方法证实:
1.
public void print() {  
super.print(); //这样可以调用你类的print
                System.out.println("子类的方法被调用!");  
            }  .

2.
public final class Test {...} 如果在Test类定义时加上final修饰符,则代码会有提示严禁继承。
2 楼 vial_z 2011-12-19  
//这样可以调用父类的print  写错一个字了
3 楼 yonge812 2011-12-19  
vial_z 写道
楼主的意思不是很明白,
你new Test(){.....}的时候相当于定义了一个Test的无名称子类,Java是运行是绑定的,也就是说Test执行时,系统判定你调用了子类的print方法。可以通过以下方法证实:
1.
public void print() {  
super.print(); //这样可以调用你类的print
                System.out.println("子类的方法被调用!");  
            }  .

2.
public final class Test {...} 如果在Test类定义时加上final修饰符,则代码会有提示严禁继承。

种的重写 原来是创建的一个无名称的子类,难怪不能调用子类的其他方法,我还以为是创建了名称为test的子类呢,为什么说他没有名称呢?帮忙解释一下..
4 楼 yibusky 2011-12-19  
package com.yonge.myclass; 
 
public class Test { 
 
    public void print() { 
        System.out.println("父类方法被调用!"); 
    } 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
 
        new Test() { 
 
            public void print() { 
                System.out.println("子类的方法被调用!"); 
            } 
 
            //The method print() from the type new Test(){} is never used locally 
            public void method() {
                System.out.println("Method方法被调用!");
            }
        }.method();
         
    } 
 
}
5 楼 yonge812 2011-12-20  
那相当于Test test=new Test(){};创建了两个实例么?一个是test实例,调用的是默认的构造方法,一个是匿名的实例,是这样理解的吗?