子类创建对象

  

         因为子类是继承自父类,所以在为子类创建对象之前,其会先后的为父类的静态全局变量、子类的静态全局变量进行初始化,之后再先后为父类的实例全局变量、子类的实例全局变量进行初始化。

     

       1.子类要为父类的私有属性单独的在堆里开辟空间,这个空间不属于任何一个对象,原因是私有属性要使用必须要有个空间,并默认初始化,不会为父类的私有方法在堆里开辟空间,原因是私有方法在方法区。

       2.为子类开辟空间,为继承自父类的属性开辟空间,并为在父类里定义的、子类继承的方法开辟方法空间,然后为子类新增的方法开辟空间,(继承的方法的空间和新增的属性和方法的空间)

       3.一定会把子类的对象地址传到父类的构造方法,调用父类的构造方法,到类里头绑定的属性寻找并初始化,为子类继承的属性私有化,和为子类不能继承的属性私有化。若父类的构造方法是私有的,则子类对象不能创建,编译会出错

       4.调用子类的构造方法可以初始化子类新增的属性,和继承父类的属性和方法初始化。


### 关于抽象类为何不能直接创建对象 抽象类是一种特殊的类,它本身并不提供完整的功能实现,而是作为其他具体类的基础模板存在。由于抽象类可能包含未实现的方法(即抽象方法),因此无法直接实例化[^1]。如果允许直接创建抽象类的对象,则这些未实现的抽象方法将无从调用,这违背了面向对象编程的设计原则。 #### 抽象类的作用 抽象类的主要作用在于定义一组通用的行为规范,供具体的子类去实现并扩展。通过这种方式,抽象类能够强制约束子类必须遵循某些特定的功能契约,从而提高代码的一致性和可维护性[^2]。 #### 如何通过子类创建对象 为了使抽象类中的行为得以实际应用,通常的做法是由某个非抽象的具体子类继承自该抽象基类,并且在其中完成所有必需的抽象方法的实现工作之后,就可以基于这个具体化的子类来构建相应的实体对象了[^3]。 下面给出一段简单的Java代码演示这一过程: ```java // 定义一个抽象类 Animal abstract class Animal { // 这是一个普通的成员函数 public void sleep() { System.out.println("Sleeping..."); } // 下面的是一个抽象方法 abstract void makeSound(); } // Dog 类继承自 Animal 并实现了它的抽象方法 class Dog extends Animal { @Override void makeSound() { System.out.println("Bark"); } } public class Main{ public static void main(String[] args){ // 正确的方式:通过Dog类创建Animal类型的引用变量 Animal myPet = new Dog(); // 调用方法 myPet.sleep(); // 输出 Sleeping... myPet.makeSound(); // 输出 Bark } } ``` 以上程序展示了如何利用子类 `Dog` 来间接操作属于父级抽象类别下的属性与服务。 ### 总结 综上所述,之所以不允许直接生成抽象类本身的实例是因为它们往往缺乏完全定义好的逻辑流程;只有当某特定种类满足全部条件后才适合成为真实世界里的个体代表——而这正是借助派生出来的常规形式达成目标的关键所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值