面向对象学习过程

文章介绍了面向对象编程中的三个核心概念:封装、继承和多态。封装通过隐藏对象的属性和实现细节,只对外提供接口,增强了代码的安全性。继承允许子类扩展父类的功能,而多态则确保不同对象能对同一消息做出不同响应。文中还提供了C#代码示例来展示这三个概念的实际应用。
摘要由CSDN通过智能技术生成

一、定义

1.封装

封装,即隐藏对象的属性和实现细节,仅对外公开接口(get与set方法或者构造函数),控制在程序中属性的读和修改的访问级别将抽象得到的数据和行为(或功能)相结合,形成一个整体。(1)隐藏实现:使用你的代码的用户无需知晓其内部工作原理。唯一需要知道的是如何实例化 和使用对象。总之,提供给用户使用方式,但是隐藏细节。

 2.继承:对一个类的属性或方法进行扩展,继承可以使得子类具有父类的属性方法或者重新定义、追加属性和方法等。

减弱了封装,继承意味着对其他类的强封装,但 是弱化了父类和其子类之间的封装

3.多态:,多态从字面上理解就是很多形状。当对象收到消息后,该对象 必须定义一个方法来响应该消息。在继承体系结构中,所有的子类会继承其父类的 接口。然而,由于每个子类是单独的实体,每个子类需要对同一个消息有不同的响 应。父类方法的在不同子类的不同种实现形式。

二、代码具体实现

封装:

```csharp
public class Person {
    private string name;
    private int age;
    
    public Person(string name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public void SayHello() {
        Console.WriteLine("Hello, my name is {0} and I'm {1} years old.", name, age);
    }
}
```

在上面的代码中,我们定义了一个Person类,并将name和age字段设为私有。我们通过构造函数来初始化这些字段,同时提供了一个公共方法SayHello来输出人物的基本信息。这样做可以避免外部直接访问类的私有成员,从而实现了封装。

继承:

```csharp
public class Animal {
    public virtual void Move() {
        Console.WriteLine("The animal moves.");
    }
}

public class Dog : Animal {
    public override void Move() {
        Console.WriteLine("The dog runs.");
    }
}
```

在上面的代码中,我们定义了一个Animal类,并提供了一个虚方法Move。然后我们又定义了一个Dog类,并使用override关键字重写了父类Animal的Move方法。这样做可以使得Dog类继承Animal类的所有成员,同时还可以自定义一些额外的行为,从而实现了继承。

多态:

```csharp
public abstract class Shape {
    public abstract double Area();
}

public class Rectangle : Shape {
    private double width;
    private double height;
    
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    
    public override double Area() {
        return width * height;
    }
}

public class Circle : Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    public override double Area() {
        return Math.PI * radius * radius;
    }
}

public class Client {
    public static void Main() {
        Shape[] shapes = new Shape[2];
        shapes[0] = new Rectangle(10, 20);
        shapes[1] = new Circle(5);
        
        foreach (Shape shape in shapes) {
            Console.WriteLine("Area of {0}: {1}", shape.GetType().Name, shape.Area());
        }
    }
}
```

在这个例子中,我们定义了一个抽象类Shape,并提供了一个抽象方法Area,用于计算形状的面积。然后我们又定义了两个具体的类Rectangle和Circle,并分别实现了Area方法。最后,在Client类中我们使用Shape数组来存储不同的形状对象,并通过循环调用每个对象的Area方法,输出不同形状的面积信息。这样做可以实现多态,即不同对象对同一方法做出不同的响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值