java:
class A{
int i;
A(){
this.i = 10;
}
public void add(){
i+=2;
}
public void say(){
System.out.println("A说AAA");
}
}
class B extends A{
int i;
B()
{
this.i = 20;
}
public void add(){
i+=3;
}
public void say(){
System.out.println("B说BBB");
}
}
@Test
void test4(){
A a = new A();
B b = new B();
a.add();
b.add();
System.out.println(a.i);
System.out.println(b.i);
a.say();
b.say();
System.out.println("=======");
a=b;
System.out.println(a.i);
System.out.println(b.i);
a.say();
b.say();
// 12
// 23
// A说AAA
// B说BBB
//=======
// 10
// 23
// B说BBB
// B说BBB
}
结果:
12
23
A说AAA
B说BBB
10
23
B说BBB
B说BBB
C#:
namespace CsharpTest2
{
public class A
{
public int i = 10;
public void add()
{
i += 2;
}
public void say()
{
Console.WriteLine("A说AAA");
}
}
public class B : A
{
public int i = 20;
public void add()
{
i += 3;
}
public void say()
{
Console.WriteLine("B说BBB");
}
}
public class Program
{
static void Main(string[] args)
{
//B b = new B();
//A a = b;
B b = new B();
A a = new A();
a.add();
b.add();
Console.WriteLine(a.i);
Console.WriteLine(b.i);
a.say(); //A说AAA
b.say(); //B说BBB
a = b;
Console.WriteLine("==========");
Console.WriteLine(a.i);
Console.WriteLine(b.i);
a.say();
b.say();
}
/*
12
23
A说AAA
B说BBB
==========
10
23
A说AAA
B说BBB
*/
}
}
结果:
12
23
A说AAA
B说BBB
10
23
A说AAA
B说BBB
文章展示了Java和C#中类继承的概念,通过A类和B类的实例展示了成员变量和方法的使用。在Java例子中,当A类型的引用指向B类型的对象时,显示了方法的重写行为;而在C#例子中,同样的情况却表现出不同的结果,这体现了两种语言在多态性上的差异。
1979

被折叠的 条评论
为什么被折叠?



