🧠 总结一句话:

C# 的面向对象就像 Java 的面向对象,几乎一模一样,只是语法和一些细节稍微不同。


🔍 通俗对比讲解

1. 类和对象(Class & Object)

✅ C#:

1
2
3
4
5
6
7
8
9
10
11
12
public class Person {
public string Name { get; set; }

public void SayHello() {
Console.WriteLine("你好,我是 " + Name);
}
}

// 创建对象
Person p = new Person();
p.Name = "小明";
p.SayHello();

🔄 Java 对比:

1
2
3
4
5
6
7
8
9
10
11
12
public class Person {
public String name;

public void sayHello() {
System.out.println("你好,我是 " + name);
}
}

// 创建对象
Person p = new Person();
p.name = "小明";
p.sayHello();

通俗解释:

  • C# 和 Java 都是“先定义类,再创建对象”。
  • 就像盖房子:类是图纸,对象才是真正的房子。

2. 属性 vs 字段(Property vs Field)

✅ C#:

1
2
3
4
5
6
7
8
9
10
public class Person {
// 字段(内部使用)
private string _name;

// 属性(对外暴露)
public string Name {
get { return _name; }
set { _name = value; }
}
}

🔄 Java 对比:

1
2
3
4
5
6
7
8
9
10
11
public class Person {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

通俗解释:

  • C# 的 property 是一种更简洁的方式来封装字段,相当于 Java 的 getter/setter 合体。
  • 就像你有个抽屉(字段),别人不能直接打开看,只能通过你提供的按钮(属性)来取东西。

3. 继承(Inheritance)

✅ C#:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Animal {
public void Eat() {
Console.WriteLine("动物在吃东西");
}
}

public class Dog : Animal {
public void Bark() {
Console.WriteLine("汪汪!");
}
}

Dog d = new Dog();
d.Eat(); // 父类的方法
d.Bark(); // 子类的方法

🔄 Java 对比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Animal {
public void eat() {
System.out.println("动物在吃东西");
}
}

public class Dog extends Animal {
public void bark() {
System.out.println("汪汪!");
}
}

Dog d = new Dog();
d.eat();
d.bark();

通俗解释:

  • 继承就是“孩子继承父母的基因”,子类可以使用父类的方法。
  • 在 C# 中用 : 表示继承,在 Java 中用 extends

4. 接口(Interface)

✅ C#:

1
2
3
4
5
6
7
8
9
public interface ISwim {
void Swim();
}

public class Fish : ISwim {
public void Swim() {
Console.WriteLine("鱼在游泳");
}
}

🔄 Java 对比:

1
2
3
4
5
6
7
8
9
public interface ISwim {
void swim();
}

public class Fish implements ISwim {
public void swim() {
System.out.println("鱼在游泳");
}
}

通俗解释:

  • 接口就像是“行为说明书”,谁想实现这个功能就得照着做。
  • C# 和 Java 的接口都要求实现所有方法(除非是抽象类)。

5. 抽象类(Abstract Class)

✅ C#:

1
2
3
4
5
6
7
8
9
public abstract class Animal {
public abstract void MakeSound();
}

public class Cat : Animal {
public override void MakeSound() {
Console.WriteLine("喵~");
}
}

🔄 Java 对比:

1
2
3
4
5
6
7
8
9
public abstract class Animal {
public abstract void makeSound();
}

public class Cat extends Animal {
public void makeSound() {
System.out.println("喵~");
}
}

通俗解释:

  • 抽象类是一个“半成品”的类,里面有些方法只有定义没有实现。
  • 就像一个没完工的房子,你要住进去得先把厨房装修好。

📝 总结表格(C# vs Java)

功能 C# 写法 Java 写法 说明
定义类 class Person class Person 一样
继承 class Dog : Animal class Dog extends Animal C# 用冒号,Java 用 extends
接口 interface ISwim interface ISwim 一样
实现接口 class Fish : ISwim class Fish implements ISwim C# 用冒号,Java 用 implements
抽象类 abstract class Animal abstract class Animal 一样
属性 public string Name { get; set; } getName() / setName() C# 更简洁

💡 生活化比喻总结:

你可以把 C# 的面向对象想象成:

  • 一套家具组装说明书(类)
  • 每个说明书能做出一个家具(对象)
  • 如果你想做个沙发,但又要用桌子的功能,就去继承桌子的说明书(继承)
  • 如果你想让沙发也能坐又能动,那就加个“可移动”的说明书(接口)
  • 如果说明书还没写完,那就是抽象类(抽象类)

如果你是 Java 出身,看到这里你应该已经明白:C# 的 OOP 并没有什么新花样,只是换了个说法而已 😊