using System;
namespace ConsoleApplication2
{
class BaseClass
{
public virtual void Method1()
{
Console.WriteLine("Base - Method1");
}
}
class DerivedClass : BaseClass
{
public void Method1() // DerivedClass.Method1() hides inherited memeber BaseClass.Method1(). Use the new keyword if hiding was intended.
{
Console.WriteLine("Derived - Method1");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bd = new DerivedClass();
bd.Method1();
Console.ReadLine();
}
}
}
我理解不同的行为(与覆盖相比是新的),但不理解术语。
方法对基类隐藏方法是什么意思?
class BaseClass
{
public virtual void Method1()
{
Console.WriteLine("Base - Method1");
}
}
class DerivedClass : BaseClass
{
public void Method1() // DerivedClass.Method1() hides inherited memeber BaseClass.Method1(). Use the new keyword if hiding was intended.
{
Console.WriteLine("Derived - Method1");
}
}
想象一下,如果您写了以下内容:
var dc = new DerivedClass();
dc.Method1();
您编译并运行此代码,然后调用派生的方法。但是现在,删除baseClass
中的method1
。代码编译和运行仍然完全相同。
我被这个概念困住了。 这是我在一个站点上看到的解释的一部分: 隐藏实现 我是这样想象的: 库客户机是否知道这个实现有什么区别?
此代码将无法编译,因为中的的返回类型。 我知道§8.4.8.3“覆盖和隐藏要求”中的JLS 8规定: 如果具有返回类型R1的方法声明d1重写或隐藏了具有返回类型R2的另一个方法d2的声明,则d1必须是d2的返回类型可替换的(§8.4.5),否则会发生编译时错误。 我的问题是,在静态方法的特定情况下,这种编译时检查的动机是什么,一个例子说明了在编译期间不进行这种验证会产生任何问题是理想的。
Test类是超级类,Fest是它的子类,因为我们知道静态方法不能被重写,即使我遇到了“静态方法不能在java中隐藏实例方法”这样的错误,有人能解释一下吗,提前谢谢。
问题内容: 问题很简单而且简短:为什么要清除浮动?我查看了w3标准文档,但没有任何暗示。 问题答案: 因为当您与其他任何东西一起使用时会建立一个新的块格式设置上下文(链接到w3.org规范)。
问题内容: 我无法理解如何正确确保在这种情况下不存在某些问题: 我发现检查该值是否实际的唯一方法是使用反射。 这真的是想要的行为吗?还是在代码中看不到一些重大错误? 在此处播放链接 问题答案: 这里的问题是那是一种类型。Go中的接口类型保存实际值及其 动态 类型。关于此的更多详细信息:反射定律#接口的表示。 您返回的切片包含2个非值。第二个值是一个接口值,一个保存指针值的(值;类型)对和一个具体类
主要内容:Java15隐藏类的目标Java 15 引入了其他类字节码不能直接使用的隐藏类。这些隐藏类旨在供在运行时生成类并使用反射使用它们的框架使用。 隐藏类被定义为基于 Nest 的访问控制上下文的成员,它可以被卸载而与其他类无关。 该提案 JEP 371 旨在通过提供标准 API 来定义不可发现且生命周期有限的隐藏类,从而改进 JVM 上的所有语言。JDK 框架或外部框架可以动态生成类,从而可以生成隐藏类。 JVM 语言在很大