`

类的重写

阅读更多

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

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这个对象的概念还没有搞清楚,希望知道的回复一下,谢谢!!! 

0
1
分享到:
评论
5 楼 yonge812 2011-12-20  
那相当于Test test=new Test(){};创建了两个实例么?一个是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();
         
    } 
 
}
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的子类呢,为什么说他没有名称呢?帮忙解释一下..
2 楼 vial_z 2011-12-19  
//这样可以调用父类的print  写错一个字了
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修饰符,则代码会有提示严禁继承。

相关推荐

    VS2019 MFC类库CrectTracker类重写MFCApplicationCRectTracker.rar

    在“VS2019 MFC类库CrectTracker类重写”的项目中,开发者可能是在原有的CRectTracker基础上进行了定制,以满足特定的界面交互需求。这可能包括修改其行为,如改变边框处理逻辑、添加新的视觉效果或者优化性能。重写...

    增加本地类重写全局类

    利用本地类重写全局类不仅能够降低对服务器的直接修改,而且允许用户针对特定报表进行样式调整,从而提供更个性化的报表展现。以下是在Cognos ReportStudio中重写全局类的具体步骤: 1. 创建一个带有追溯定义的报表...

    VC源码-重载单选按钮类重写DDX数据交换

    此代码在VS2005上编译通过,为了重新绘制按钮的外观,通常是重载CButton类,但是对于单选按钮,如果使用了DDX_Radio的变量交换机制,仅采用简单重载将会出错无法实现,本代码中重写了DDX_RadioEx函数,可以代替DDX_...

    C#中子类重写父类的方法

    本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承的概念 在C#中,继承是通过使用`:`运算符实现的。一个类(子类)可以通过继承另一个类(父类)来获得其所有非私有的成员...

    python继承类重写方法.docx

    这种重写方法的能力使我们可以根据需要定制类的行为。在实际编程中,这特别有用,因为我们可以定义一个基础类,然后创建一系列派生类,每个类都有特定的行为。通过这种方式,我们能够保持代码的整洁和模块化,同时...

    python继承类重写方法(1).docx

    Python中的继承和方法重写是面向对象编程的重要...而方法重写则允许我们在不破坏原有代码结构的基础上,对特定类的行为进行定制,以满足具体项目的需求。在实际开发中,这些特性经常被用来设计灵活、可扩展的代码架构。

    ASP 2.0 下使用模版页和重写Page类

    本篇将重点讨论在ASP 2.0下如何使用模板页以及重写Page类,这两个概念是构建动态网页的关键组成部分。 首先,我们来探讨模板页(Template Pages),也称为母版页(Master Pages)。模板页是ASP.NET 2.0引入的一个...

    Java重写.docx

    Java重写知识点详解 Java中的重写(Override)和重载(Overload)是两个重要的概念,它们都是指方法的定义方式...在上面的代码中,我们可以看到,SiCong类重写了JianLin类的words()方法,并定义了一个静态方法test()。

    c++ 重载、覆盖、重写

    // 以上示例中,B 类重写了 A 类的 fun3 函数。 ``` #### 四、隐藏(Hiding) 隐藏是指派生类中有一个与基类中的某个函数同名但不构成重写的函数。无论参数列表是否相同,基类中的函数都会被隐藏。如果想要在派生类...

    kotlin中数据类重写setter getter的正确方法

    在Kolin中,将这些类统一称为数据类,用关键字data标记。 data class User(val name: String, val age: Int) 编译器会根据主构造器中声明的全部属性, 自动推断产生以下成员函数: equals()/hashCode()函数对, ...

    序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口.doc

    在这个文档中,我们主要关注如何处理序列化多表操作,理解请求与响应的流程,以及如何使用视图组件(包括子类与拓展类)以及重写`GenericAPIView`类的接口。 首先,让我们深入探讨序列化多表操作。在Django中,我们...

    java的thread类重写run方法的双线程从1加到100

    本小练习主要关注如何通过继承`Thread`类来创建并运行双线程,以便从1累加到100。下面我们将深入探讨这个话题。 首先,`Thread`类是Java中的核心类,它代表了程序中的一个执行线程。当你创建一个新的`Thread`对象并...

    java子类重写父类的方法.doc

    Java 中子类重写父类的方法是面向对象编程的核心概念之一。子类可以重写父类的方法,以改变或扩展父类的行为。但是,子类重写父类的方法需要遵守一定的规则,以避免编译器错误和运行时异常。 A. 重写规则之一:重写...

    重载与覆写/重写的区别

    重载与覆写/重写的区别 ... 父类中private方法不能被子类重写,因为private只有父类本类可见。 */ /** * 6. 静态方法不存在重写概念,重写是面向对象特性,静态方法是类方法,用类名直接访问。 */ 复制代码

    java 重载,重写以及继承,多态的区别

    例如,在上面的例子中,`Shape` 类的 `getSides()` 方法可以被 `Triangle` 和 `Rectangle` 类重写,从而实现多态。 重载是指同一个类中的多个同名方法,重写是指子类对父类方法的重新实现,继承是指子类继承父类的...

    java中的重载和重写的区别

    在这个例子中,`Child`类重写了`Parent`类的`method`方法。当通过`Child`类的对象调用`method`方法时,执行的是子类中重写后的方法。 关于动态绑定(也称为晚期绑定或运行时多态),这是Java中方法调用的一个关键...

    方法重载和方法重写

    在这里,`Dog`类重写了`Animal`类的`sound`方法,提供了特定于`Dog`的行为。 ### 关键区别 1. **范围**:方法重载发生在同一类内部,而方法重写发生在继承的上下文中,即子类对父类方法的改变。 2. **参数列表**:...

    重载重写重定义测试代码

    在上面的例子中,`Derived`类重写了`Base`类的`display`虚函数,使得在子类对象上调用`display`时,会执行子类的版本。 **3. 重定义(Redefinition)** 重定义通常指的是在不同的作用域内对已存在的标识符(如变量...

    方法重写(覆盖)

    - **最终(final)方法**:被声明为`final`的方法不能被子类重写,以防止子类改变其行为。 理解并熟练掌握方法重写对于编写灵活、可扩展的代码至关重要。它允许我们创建具有不同行为的子类,同时也保持了代码的统一...

Global site tag (gtag.js) - Google Analytics