抽象类的使用实例——实例化

本文介绍了一个抽象类的应用实例,通过创建抽象类People并由具体类Student和Worker继承,实现了代码复用和简化。展示了如何利用抽象类定义通用行为,并在子类中实现特定功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来是不想把这个例子放到上面去的,但是看了一下,发现他还是有一个好的优点值得我们去使用的。在讲到抽象类的时候之前提到了,抽象类不能实例化:如图的就是一个实例化的过程

5PV1L}LOG4)$_IBE2SKKQH8

People类就不能实例化。所以这里借助了普通类对抽象类的继承,来实现了抽象类中方法的实现。这对于一些公共方法,我们就可以创建抽象类来容纳。然后用普通类来继承抽象类里面的方法,而且不用重复的编写相同的代码,达到简化代码的效果。大家试试看吧。


namespace 抽象类的使用
{
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student.Eat();
            student.Study();

            Console.ReadLine();

        }
    }
    /// <summary>
    /// 抽象类People
    /// </summary>
    public abstract class People
    {
        /// <summary>
        /// 年龄字段
        /// </summary>
        private int age;

        private string name;

        /// <summary>
        /// 姓名属性
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value;
            }
        }

        public void Eat()
        {
            Console.WriteLine("Eat方法被调用");
        }
    }
    /// <summary>
    /// Student类,继承抽象类People
    /// </summary>
    public class Student : People
    {
        private string school;

        public string School
        {
            get
            {
                return school;
            }
            set
            {
                school = value;
            }

        }
        public void Study()
        {
            Console.WriteLine("Study方法被调用");
        }
    }
    public class Worker : People
    {
        private string factory;

        public string Factory
        {
            get
            {
                return factory;
            }
            set
            {
                factory = value;
            }

        }
        public void Work()
        {
            Console.WriteLine("Work方法被调用");
        }
    }
}

ClassDiagram1

转载于:https://www.cnblogs.com/zzw2011/archive/2010/12/21/1912767.html

抽象类本身不能直接实例化,这是 Java 编程语言的一个基本规则。然而,理解这一概念需要深入探讨其背后的原理及其实际应用场景。 ### 抽象类的概念 抽象类是指含有一个或多个抽象方法的类,或者即使不包含任何抽象方法,只要声明为 `abstract` 关键字修饰的类也被称为抽象类抽象类的设计目的是为了提供一种模板式的结构,允许子类继承并实现具体的功能[^1]。 当提到“子类实例化会先实例化父类”,这里的含义并不是指父类(尤其是抽象类)会被单独实例化,而是指在创建子类对象的过程中,父类的构造函数会被调用以完成初始化工作。这种行为并不违背抽象类无法被实例化的原则,因为最终的对象仍然是由具体的子类所表示的。 ### 构造过程中的细节 考虑以下代码片段: ```java public abstract class AbstractClass { protected String message; public AbstractClass(String msg){ this.message = msg; System.out.println("Abstract Class Initialized with Message: "+message); } public abstract void displayMessage(); } public class ConcreteClass extends AbstractClass{ public ConcreteClass(String msg){ super(msg); // 调用了父类(抽象类)的构造器 } @Override public void displayMessage() { System.out.println(message); } } ``` 在这个例子中,当我们创建 `ConcreteClass` 的实例时,实际上也会执行 `AbstractClass` 的构造函数。这是因为 Java 需要确保所有的超类都被适当初始化以便子类能够安全地访问这些成员变量和已实现的方法[^3]。 尽管如此,重要的一点在于:虽然看起来像是对抽象类进行了某种形式上的 “实例化”,但实际上并没有产生独立存在的抽象类对象;相反,它是作为一个整体——即完整的子类实体的一部分而存在。 ### 特殊情况下的间接实例化 有一种特殊情况值得注意,那就是匿名内部类的方式可以在某种程度上看似实现了对抽象类本身的实例化操作。例如: ```java AbstractClass instance = new AbstractClass("Test") { @Override public void displayMessage() {} }; instance.displayMessage(); // 输出结果表明该匿名内部类确实基于原始抽象类构建而成。 ``` 这里通过定义一个新的匿名子类,并立即对其进行实例化处理,从而达到了类似于直接使用抽象类的效果。但这本质上还是遵循了原有规定 —— 即只有非抽象的具体类型才可以拥有自己的真实对象[^2]。 ### 结论 综上所述,严格意义上讲,Java 中的抽象类不可以被直接实例化。但是,在某些特定条件下(如利用子类或匿名内部类),我们可以达到近似效果而不违反语法规则。理解和掌握这一点有助于更好地运用面向对象编程思想解决实际问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值