🧠 总结一句话:
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 并没有什么新花样,只是换了个说法而已 😊
Java人也能轻松上手CSharp:面向对象五大核心全对比