一个说明抽象类的好例子

本文通过一个具体的C#代码示例介绍了如何使用抽象类、继承、抽象方法及其实现、静态方法的重写等概念。示例中定义了一个抽象基类Vehicle及其派生类Car,演示了构造函数、抽象方法、静态方法和虚方法的使用。

 using System;

namespace C_Project
{
    public abstract class Vehicle  //抽象父类
    {
        protected int wheels;
        protected float weight;
        protected readonly static int staticWheels = 1;
        protected const  float staticWeight = 2;

        public Vehicle() { }//父类不带参数的构造函数
        public Vehicle(int w, float g)//父类带参数的构造函数
        {
            wheels =w;
            weight =g;
        }

        public abstract void AbstractFunction();//抽象方法

        public static void StaticFunction()//静态方法
        {
            Console.WriteLine("父类静态方法:" + staticWheels * staticWeight);
        }

        public virtual  void Speak()//非抽象静态方法
        {
            Console.WriteLine("父类非抽象静态方法" + wheels * weight);
        }
    }

 

    class Car : Vehicle //子类
    {
        int passger;
        public Car(int w, float g, int p)
            : base(w, g)//调用父类构造函数
        {
            wheels = w;
            weight = g;
            passger = p;
        }

        public override void AbstractFunction()//实现父类抽象方法
        {
            Console.WriteLine("子类实现父类抽象方法:" + wheels + passger);
        }

        public new static void StaticFunction()//重写父类静态方法,并且隐藏父类方法
        {
            Console.WriteLine("子类重写父类静态方法:" + staticWheels + staticWeight);
        }

        public new void Speak()//重写父类非抽象静态方法,并且隐藏父类方法
        {
            Console.WriteLine("子类重写父类非抽象静态方法,并且隐藏父类方法:" + wheels +

weight);
        }

        public void DSpeak()//子类非静态抽象方法
        {
            base.Speak();
        }

        public static void Main(string[] args)
        {
            Car cc = new Car(2,3,4);
            cc.Speak();//调用子类方法
            cc.DSpeak();//调用父类方法
            cc.AbstractFunction();//调用子类实现的父类抽象方法
            Vehicle.StaticFunction();//调用父类静态方法
            Car.StaticFunction();//调用子类静态方法
        }
    }


}

在面向对象编程中,声明抽象类具体语法会因编程语言的不同而有所差异。以下以 Java 为例说明如何声明一个抽象类。 ### 声明抽象类的语法 在 Java 中,使用 `abstract` 关键字来声明一个抽象类抽象类可以包含抽象方法和具体方法,同时也可以定义成员变量和构造方法。 ```java abstract class Animal { // 抽象方法 public abstract void makeSound(); // 具体方法 public void breathe() { System.out.println("This animal is breathing."); } } ``` 上述代码中,`Animal` 是一个抽象类,它包含一个抽象方法 `makeSound()` 和一个具体方法 `breathe()`。由于 `Animal` 包含至少一个抽象方法,因此它必须被声明为抽象类[^1]。 ### 继承抽象类并实现抽象方法 如果一个抽象类继承了抽象类,则必须实现所有未实现的抽象方法;否则,该子类也需要声明为抽象类。 ```java class Dog extends Animal { @Override public void makeSound() { System.out.println("Woof!"); } } ``` 在上面的示例中,`Dog` 类继承了抽象类 `Animal`,并通过 `@Override` 注解实现了抽象方法 `makeSound()`。因为 `Dog` 提供了所有未实现的抽象方法,所以它是一个具体的类,可以被实例化[^2]。 ### 实例化子类对象 尽管抽象类不能直接通过 `new` 创建对象,但可以通过其子类创建实例: ```java public class Main { public static void main(String[] args) { Animal myDog = new Dog(); // 合法:通过子类实例化抽象类 myDog.makeSound(); // 输出 "Woof!" myDog.breathe(); // 输出 "This animal is breathing." } } ``` 在这个例子中,`myDog` 的实际类型是 `Dog`,它是 `Animal` 抽象类一个具体实现。通过这种方式,可以在面向对象编程中利用抽象类设计灵活且可扩展的类层次结构[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值