`

认识new修饰符

    博客分类:
  • C#
阅读更多
new关键字有三种用法,也有归为两种:
(1)new 运算符 用于创建对象和调用构造函数。
(2)new 修饰符 用于隐藏基类成员的继承成员。
(3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。

在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员。例如:

public class BaseC 
{ 
      public int x; 
      public void Invoke() {} 
} 
public class DerivedC : BaseC 
{ 
      new public void Invoke() {} 
}


Another Example:
using System;

public class MyBaseC
{
    public static int x = 55;
    public static int y = 22;
    public virtual void invoke()
    {
        Console.WriteLine("invoke in MyBaseC");        
    }
}

public class MyDerivedC : MyBaseC
{
    new public static int x = 100;
    /*new*/ public /*override*/ void invoke()
    {
        Console.WriteLine("invoke in MyDerivedC");
    }
    public static void Main()
    {
        Console.WriteLine(x);
        Console.WriteLine(MyBaseC.x);
        Console.WriteLine(y);
        MyBaseC o1 = new MyBaseC();
        o1.invoke();
        MyBaseC o2 = new MyDerivedC();
        o2.invoke();
        MyDerivedC o3 = new MyDerivedC();
        o3.invoke();
        Console.Read();
    }
}


输出:
100
55
22
invoke in MyBaseC
invoke in MyBaseC
invoke in MyDerivedC

一道笔试题:
abstract class BaseClass
{
    public virtual void MethodA()
    {
    }
    public virtual void MethodB()
    {
    }
}
class Class1: BaseClass
{
    public void MethodA(string arg)
    {
    }
    public override void MethodB()
    {
    }
}
class Class2: Class1
{
    new public void MethodB()
    {
    }
}
class MainClass
{
    public static void Main(string[] args)
    {
        Class2 o = new Class2();
        Console.WriteLine(o.MethodA());
    }
}

请问o.MethodA()调用的是:
A.BaseClass.MethodA     
B.Class2.MethodA
C.Class1.MethodA
D.都不是
答:A
0
0
分享到:
评论

相关推荐

    mooc课程-java-期末考试试卷.docx

    * 类的定义需要注意访问修饰符、abstract 和 final 修饰符,例如 public abstract class Car {...} 正确。 * 对象和类的关系需要注意,例如汽车和交通工具是类和对象的关系。 这些知识点涵盖了 Java 语言的基本...

    Java的一点心得

    - **this关键字与static修饰符**:详细解析了`this`关键字的用法,尤其是在处理方法中成员变量与参数重名情况时的作用,以及`static`修饰符在声明静态变量和方法时的特性,强调了它们在实现类内资源共享和方法调用时...

    Java:new一个对象的过程中发生了什么?.pdf

    了解这些知识点能够帮助Java程序员更好地理解new操作符背后复杂的机制,并且对于性能优化、多线程安全等问题有更深刻的认识。通过双亲委派模型保证类加载的安全性,通过类的链接和初始化来确保类能够正确地执行,...

    day05-集合.pdf

    - **语法**:`修饰符 返回值类型 方法名(类型... 参数名) {}` - 示例:`public static void printArray(int... numbers) { for (int num : numbers) { System.out.print(num + " "); } }` - **应用场景**:当需要...

    Java基础题目

    16. **私有访问修饰符**:如果希望某个变量只可以被类本身访问和调用,应该使用`private`访问控制修饰符。例如,`private int myVar;`这样的变量只能在定义它的类内部访问。 ### 字符串对象的认识 17. **字符串类型...

    JavaOOP_第1章上机练习.zip

    在Java中,我们通过类(Class)来实现封装,通过访问修饰符(如public, private, protected)来控制成员变量和方法的可见性,从而保护数据的安全性。 2. 继承:继承允许一个类(子类)从另一个类(父类)继承属性和...

    Java语言程序设计(第二版)李尊朝版ppt课件.rar

    其中,接口、抽象类、访问修饰符、构造器等也是这一章的重点。 第九章“异常处理new”讲述了Java的错误处理机制,包括try-catch-finally块,throw和throws关键字,以及自定义异常,帮助程序员编写健壮的代码。 第...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    【类说明修饰符】class 类名【extends 子句】【implements 子句】 type instance-varable1; type instance-varable2; type instance-varable3; the methodname1(parameter-list){method-body;} the methodname2...

    java程序设计课程--实验报告-实验06.pdf

    实验06的目标是让学生掌握Java中的类的编写,方法声明,以及理解构造方法和其他方法的区别。此外,实验还强调了可见...同时,他们也会对可见性(如private修饰符)和作用域有更深的认识,这些都是Java编程的基础概念。

    JAVA期末复习考试含答案.docx

    - **解析**:在 Java 中,接口只能使用 `public` 修饰符,这样可以确保接口对外公开。 ### 9. 整型变量与整型对象 第十四题考察了整型变量与整型对象的区别。 - **正确选项**:`a 和 b 都是整数类型变量并且值...

    head first java 1-3章

    6. **访问控制**:理解`public`, `protected`, `private`和默认(无修饰符)的访问级别。 通过《Head First Java》的前三个章节,读者可以建立起对Java编程的基本认识,掌握面向对象编程的核心概念,为后续深入学习...

    Java入门练习50题

    - 封装:理解封装的重要性,如何通过访问修饰符来保护数据。 4. **数组** - 一维数组:创建和操作一维数组,掌握数组的遍历。 - 多维数组:理解二维数组和其他多维数组的使用。 5. **集合框架** - List接口:...

    java2实用教程电子教案.txt

    - Java 中的权限修饰符(public、protected、default 和 private)及其区别。 - **4.7.1 同包不同类间的访问权限** - 同一包内不同类之间访问权限的规则。 - **4.7.2 同类间的访问权限** - 类内部成员间的访问...

    PHP5面向对象编程(适合初学者)

    在PHP中,我们可以使用访问修饰符(`public`、`private`、`protected`)来控制成员变量和方法的可见性。例如: ```php class BankAccount { private $balance; public function deposit($amount) { $this->...

    高质量C++编程指南

    - **修饰符位置**:明确访问修饰符、类型修饰符等的位置规则。 - **注释规范**:定义注释的风格和格式,包括单行注释和多行注释。 - **类的版式**:针对类定义给出特定的格式要求。 #### 四、命名规则 - **共性规则...

    PHP5面向对象学习教程

    在PHP5中,可以使用访问修饰符(public, private, protected)来控制属性和方法的访问权限。例如: ```php class Person { private $name; // 私有属性,外部无法直接访问 public function getName() { // 公共...

    Java面试基础全集

    - **构造器与访问修饰符**:掌握构造器的作用,理解public、private、protected等访问修饰符的区别。 - **接口与抽象类**:理解接口与抽象类在设计模式中的应用,知道它们的异同。 3. **集合框架**: - **List、...

    PHP面向对象 课程

    在PHP中,通过访问修饰符实现封装。 6. **继承(Inheritance)**: 继承允许一个类(子类)从另一个类(父类)继承属性和方法,减少了代码重复,实现了代码复用。 7. **多态(Polymorphism)**: 多态是指同一个接口...

    JAVA常见错误代码分析

    理解和解决这些错误代码是成为一名熟练的JAVA开发者的关键步骤,通过正确地使用类、接口、以及理解变量的作用域和访问修饰符,可以避免这些常见的错误。在编写代码时,时刻保持对语法规则的清晰认识,有助于编写出...

Global site tag (gtag.js) - Google Analytics