0 0

抽象类继承初始化问题5

package demo1;

public abstract class Super {
Super(){
print();
}
public abstract void print();
}


package demo1;

public class Sub extends Super{
private int i = 10;
public void print(){
System.out.println(i);
}
public static void main(String args[]){
Sub sub = new Sub();
sub.print();
}
}


Output:
0
10

这是为什么??
2014年10月29日 16:37

1个答案 按时间排序 按投票排序

0 0

采纳的答案

这个涉及到类的初始化的问题
当你入口类Main方法里掉用Sub sub = new Sub(); 触发Sub类初始化,但他发现他有父类Super,而Super类没有初始化,所有先初始化父类,当初始化父类的时候,他的构造方法调用了一个抽象方法,所有找到子类的实现,(注意:这个时候的i值是0,默认值),所有输出0,之后初始化子类Sub, i的值是10,当调用print方法时候输出10

2014年10月29日 17:31

相关推荐

    c++抽象类继承

    构造函数接受两个字符串参数,分别用于初始化 `name` 和 `register_str` 成员变量。通过这种方式,我们可以方便地获取学生的基本信息。 ### 子类 `Lecture` `Lecture` 类同样继承自 `UniversityObject`,并且也...

    Java实例化一个抽象类对象的方法教程

    当子类实例化时,会调用抽象类中的构造方法进行初始化。 在Java中,实例化抽象类的一种常见方式是通过子类继承并实现抽象方法。假设有一个抽象类`AbstractBase`: ```java public abstract class AbstractBase { ...

    \\java类、抽象类、接口、继承和对象解析 .doc

    Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...

    C#中abstract继承抽象类

    3. **抽象类可以包含抽象和非抽象构造函数**:抽象类可以有构造函数,但是这些构造函数不能被实例化,它们通常用于初始化继承链中的数据。 4. **接口与抽象类的区别**:接口只包含方法签名,而抽象类可以包含方法...

    探究java的ClassLoader及类变量初始化顺序

    ClassLoader是一个抽象类,它是Java中的一个关键组件,实现了JVM规范定义的加载类的功能。类加载过程通常分为三个阶段:加载、验证、准备。加载阶段,ClassLoader根据类名找到对应的.class文件,并将其转换为内存中...

    Java抽象类和抽象方法

    - 抽象类可以有构造函数,但只能在继承类中使用,用于初始化父类状态。 - 抽象类可以有访问修饰符如public、protected、private等,但通常抽象类会声明为public,以允许其他包中的类进行继承。 ### 二、Java抽象...

    C#抽象类详解文档.doc

    4. **子类必须实现所有抽象成员**:如果一个类从抽象类继承,它必须实现所有未被其自身声明为抽象的抽象成员。否则,子类也会变成抽象类。 5. **抽象类可以包含非抽象成员**:除了抽象成员,抽象类也可以包含具有...

    Java 抽象类

    抽象类可以包含构造器,用于初始化抽象类中的成员变量,但不能创建抽象类的实例。 8. **匿名内部类与抽象类** 匿名内部类可以实现接口或继承抽象类,而且可以是抽象的,只要它满足不包含抽象方法的条件。 9. **...

    java利用接口和抽象类改写求圆的面积和梯形的面积.docx

    - **初始化块**:接口里不能包含初始化块,但抽象类可以包含初始化块。 - **已实现的方法**:接口里只能定义抽象方法;而抽象类则可以包含已实现的方法。 - **变量类型**:接口里只能定义静态常量,不能定义其他变量...

    java中的抽象类和接口的理解

    5. **抽象类只能被一个子类继承**:一个类可以从多个接口继承,但是只能从一个抽象类继承。 #### 三、接口(Interface) 接口是一种完全抽象的类型,用于定义一组方法签名而不提供任何实现。接口可以看作是一组...

    abstract抽象类

    3. **非抽象类继承抽象类**:当一个非抽象类(普通类)继承抽象类时,它必须实现抽象类中所有的抽象方法。如果未实现所有抽象方法,那么这个非抽象类也必须被声明为抽象类。在示例中,`Goddess` 和 `Uglywomen` 类都...

    Java抽象类高难度面试题及解析

    - 抽象类可以被其他抽象类继承,子抽象类可以扩展或保持抽象状态。 12. **final方法**: - 抽象类中的非抽象方法可以是final的,防止子类重写,但抽象方法不能是final的。 13. **实现多个接口**: - 抽象类可以...

    抽象类指针引用.rar

    在编程领域,尤其是在C++这样的面向对象编程语言中,"抽象类指针引用"是一个重要的概念,涉及到类的设计、继承和多态性。抽象类通常包含至少一个纯虚函数,不能被实例化,而是作为基类来使用,为派生类提供接口。...

    抽象类和接口

    抽象类可以使用构造方法,但是这些构造方法通常被子类所调用,以保证抽象类的初始化逻辑得以执行。 关于抽象类的具体限制如下: - 用abstract修饰符修饰的类是抽象类,用abstract修饰符修饰的成员方法是抽象方法。 ...

    java 抽象类与接口的区别

    首先,抽象类是一种不能被实例化的特殊类,它通常包含抽象方法,即没有具体实现的方法。创建抽象类的目的是为了提供一个通用的基类,让其子类继承并实现具体的功能。抽象类可以有构造方法,也可以包含非抽象方法(即...

    c++编程思想 内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数

    内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器...

    abstractJava中的抽象类

    因此,抽象类的构造方法通常用于初始化其非抽象的成员变量,供子类使用。 总结来说,抽象类和抽象方法在Java中扮演着重要的角色,它们提供了代码的灵活性和可扩展性。通过定义抽象类,我们可以定义一个通用的模板,...

    基于Java抽象类和接口实现疯狂动物城

    ●工程项目搭建与游戏初始化功能实现(2学时) ; ●动物城成员列表与动物信息修改功能设计与实现(1学时) ; ●新增动物城成员与疯狂动物查找功能设计与实现(2学时) ; ●报警与实施抓捕功能设计与实现

    类的继承练习

    ### 第二个代码示例:带有成员初始化列表的类继承 此示例进一步展示了如何在派生类中使用成员初始化列表。`base`类添加了一个整型成员变量`n`,并且构造函数接受一个参数来初始化它。`subs`类不仅继承了`base`类,...

    抽象类和抽象方法.pdf

    它们可以有构造函数,但主要用于子类实例化时的初始化。 - **抽象方法**:没有具体实现,只有方法签名,用 `abstract` 关键字声明。子类继承抽象类时,必须实现这些抽象方法,除非自身也成为抽象类。 4. **定义...

Global site tag (gtag.js) - Google Analytics