原代码及运行结果如下
ParentClass:
package com.design;
class ParentClass {
public static String staticField = "父类静态变量";
public final String finalField = "父类常量";
public static final String staticFinalField = "父类静态常量";
public static void getStr(){
System.out.println("child output");
}
}
SubClass:
package com.design;
public class SubClass extends ParentClass {
public static String staticField = "子类静态变量";
public final String finalField = "子类常量";
public static final String staticFinalField = "子类静态常量";
public static void getStr(){
System.out.println("child output");
}
public static void main(String[] args) {
//这里到底发生了什么?
ParentClass subClass = new SubClass(); //(1)
System.out.println(subClass.staticField);
System.out.println(subClass.finalField);
System.out.println(subClass.staticFinalField);
subClass.getStr();
//为什么与(1)不同呢 SubClass subClass2 = new SubClass();
System.out.println(subClass2.staticField);
System.out.println(subClass2.finalField);
System.out.println(subClass2.staticFinalField);
subClass2.getStr();
}
}
运行结果:
父类静态变量
父类常量
父类静态常量
child output
子类静态变量
子类常量
子类静态常量
child output
分享到:
相关推荐
总的来说,选择哪种方法取决于具体的需求,包括性能、代码可读性和维护性等因素。在实际项目中,为了保持代码的整洁和可维护性,建议使用属性映射或构造函数参数的方式,尤其是在处理大量属性时。同时,了解所有这些...
当调用一个方法时,如果多个子类对同一个方法有不同的实现,那么实际调用哪一个子类的方法取决于运行时对象的类型。 首先,多态体现在对象的多种形态上。在不同时刻,对象可以表现出不同的状态或者行为。例如,一个...
`Print`函数在`CParent`和`CSon`中都是非虚的,所以调用哪个版本的`Print`取决于指针的类型。`pParent`是基类指针,调用`CParent`的`Print`,而`pSon`是子类指针,调用`CSon`的`Print`。因此输出为`1,2,`。 8. ...
在运行时,实际调用的是哪个实现类的方法,取决于引用变量实际指向的对象。 以下是一个简单的例子: ```java // 定义接口InterA interface InterA { void fun(); } // 实现接口InterA的类B class B implements ...
- 成员变量有默认值,而局部变量没有,默认值取决于数据类型(例如 int 类型的成员变量默认值为 0)。 ### 方法重写与重载 - **方法重写** 发生在父类和子类之间,子类中出现与父类同名的方法,要求方法名、参数...
成员变量的布局取决于具体的类型及其对齐要求。 #### 二、单一继承类对象内存布局 在单一继承中,子类对象的内存布局由父类和自身成员共同决定。 ##### 1. **单一继承,只有成员变量的情况** 单一继承时,如果...
在多态中,成员变量的访问取决于父类,而成员方法的调用则在运行时确定,取决于实际的对象类型。 转型在多态中也很关键,向上转型(Upcasting)是将子类对象赋值给父类引用,向下转型(Downcasting)则是将父类引用...
关于静态变量与静态初始化块之间的顺序,实际上取决于它们在类中的声明顺序。例如,在下面的代码中: ```java public class TestOrder { // 静态变量 public static TestA a = new TestA(); // 静态初始化块 ...
静态变量和静态初始化块的初始化顺序取决于它们在类中出现的先后顺序。例如: ```java public class TestOrder { public static TestA a = new TestA(); static { System.out.println("静态初始化块"); } ...
- **函数原型返回值类型为父类引用,而实际返回的是子类对象**: ```cpp Base &fun(Base &b) { Derived *p = new Derived; return *p; } ``` 这种情况下,尽管返回类型是 `Base &`,但实际返回的是 `...
- **多态**:多态允许子类重写父类的方法,当父类引用指向子类对象时,调用方法的实际行为取决于子类。 #### this关键字 `this`关键字代表正在调用该方法的当前对象。常用于区分同名的局部变量和成员变量。 #### ...
- **知识点**:`System.gc()` 方法向 JVM 发出一个请求,要求进行垃圾回收,但实际上是否执行取决于 JVM 自身的策略。 - **正确答案**:B. 正确 #### 7. `friendly` 关键字是 Java 语言的访问控制修饰符。 - **知识...
对于静态变量和静态初始化块、实例变量和实例初始化块之间的初始化顺序,实际上取决于它们在类中的声明顺序。 例如,如果静态变量出现在静态初始化块之前,则静态变量先初始化;反之亦然。同理,对于实例部分也是...
其顺序取决于它们在类中声明的先后顺序。例如: ```java public class TestOrder { // 静态变量 public static TestA a = new TestA(); // 静态初始化块 static { System.out.println("静态初始化块"); } ...
当我们创建了一个对象的引用,并将其存储在一个更通用的类型变量中时,实际调用的方法取决于存储的对象的具体类型。例如,如果一个变量是父类类型的,但它实际上引用了一个子类的对象,那么当我们通过该变量调用某个...
4. 对象实例和对象引用的区别:对象实例是实际存在的对象,而对象引用是指向对象实例的变量。 变量和方法 1. 成员变量和局部变量的区别:成员变量是类的成员变量,而局部变量是方法或构造器中的变量。 2. 作用...
对于静态变量和静态初始化块而言,其初始化顺序取决于它们在类中的位置。如果静态变量出现在静态初始化块之前,则静态变量先于静态初始化块被初始化;反之亦然。同样的规则也适用于普通变量和初始化块。 总结来说,...
3. 在Java中,静态变量如果没有初始化,其默认值取决于数据类型。对于整型变量如`int`,默认值是0。因此,题目中的代码会输出0,选项D是正确的。 4. 关于构造函数,选项D描述正确。Java中的构造函数用于初始化新...
这涉及到多态的概念,即子类对象可以被视为父类对象,但具体行为取决于实际的对象类型。 2. **成员变量的访问与赋值**:第二题中,`Fruit`类有一个`int`类型的成员变量`grams`。在`setGrames`方法中,局部变量`...
多态允许我们使用父类引用指向子类对象,这样就可以调用父类中定义的公共方法,而具体实现则取决于实际的对象类型。 在Java中,修饰符对于控制访问权限和定义特性至关重要。权限修饰符有private、default、...