class base{
....
public string name();
....
}
class deriveda : base{
....
public override string name();
....
}
class derivedb : base{
....
public override string name();
....
}
class derivedc : base{
....
public override foo name();
....
}
Run Code Online (Sandbox Code Playgroud)
在我的大多数派生类中,它是一致的,但其中一个我想返回一个自定义类类型,这可能吗?
我有一个'base',它有一个virtual int名为'id' 的自动实现属性.
class bbase
{
public virtual int id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我从这个类继承到'派生'类时,我得到:
class Derived : bbase
{
public override int id
{
get
{
return base.id;
}
set
{
base.id = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
初始化基类和派生类并将值分配给基类属性后,如下所示:
bbase b2 = new bbase();
Derived d2 = new Derived();
b2.id = 6;
Run Code Online (Sandbox Code Playgroud)
当我尝试从派生类输出值时,它输出'0':
Console.WriteLine(d2.id);
Run Code Online (Sandbox Code Playgroud)
我的困惑是,当我尝试使用虚拟方法的相同方法时,它工作正常.base.method()工作正常的派生类方法.它返回基本方法中的任何内容,但为什么不返回自动实现的属性?
class bbase
{
public virtual void execute() { Console.WriteLine("base.execute2"); }
}
class Derived : bbase
{
public override void execute() …Run Code Online (Sandbox Code Playgroud) 这很好用
class A
{
public void f1(int x) {
System.out.println("F1 of A");
}
}
class B extends A
{
public void f1(int x) {
System.out.println("F1 of B");
}
}
public class Overriding {
public static void main (String[] args) {
A obj = new B(); //No Error
obj.f1(7);
}
}
Run Code Online (Sandbox Code Playgroud)
但这给出了一个错误
class A
{
public void f1(int x) {
System.out.println("F1 of A");
}
}
class B extends A
{
public void f1(int x) {
System.out.println("F1 of B");
}
}
public …Run Code Online (Sandbox Code Playgroud) 基本上,我必须重写对象Employee的equals方法。
我试过了
public boolean equals( Object b ){
if (this == b) return true;
if ( ! (b instanceof Employee) )
return false;
final other=(Employee)b;
return getID()==other.getID();
}
Run Code Online (Sandbox Code Playgroud)
但收到一个错误:
Employee.java:28: error: <identifier> expected
final other=(Employee)b;
Run Code Online (Sandbox Code Playgroud)
public boolean equals( Object b )
{
if ( ! (b instanceof Employee) )
return false;
Run Code Online (Sandbox Code Playgroud) public static explicit operator int(Author a)
{
return a.Publications.Length;
}
public static implicit operator int(Author a)
{
return a.Publications.Length;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不这样做?我的老师让我覆盖了Author类的operator int的隐式和显式转换.+我可以得到深拷贝的解释:D?
问这个问题的原因是Java中的String是实习的所以
String s1 = "Hello";
String s2 = "Hello";
Run Code Online (Sandbox Code Playgroud)
s1 和 s2 都指向内存中的同一个对象。不会创建两个不同的对象。
s1.equals(s2)应该返回 true 并且确实如此。现在在java文档中它说String类覆盖了对象类的equals方法。但真的吗?
因为即使 String 类没有覆盖 Object.equals(),equals 方法的输出也会保持不变。
如果它确实覆盖了,为什么需要它?
overriding ×6
c# ×3
java ×3
inheritance ×2
equals ×1
explicit ×1
implicit ×1
oop ×1
properties ×1
string ×1