Java基础与继承实践:99个经典习题解析

需积分: 9 9 下载量 111 浏览量 更新于2024-07-26 收藏 326KB DOC 举报
1. Java练习题:题目涉及字符串替换和对象比较 题目1询问了编译并运行一段Java代码的结果。代码定义了一个名为`Strings1`的字符串,初始值为"amit",然后调用`replace()`方法将其中的字符'm'替换为'r'。第一行输出将是替换后的字符串,即"arit"。由于字符串是不可变的,所以`s1`变量并未改变,因此第二行输出仍为"amit"。接着,创建了两个字符串`s2`和`s3`,并将`s1`的替换结果赋给`s2`,它们指向的是同一个字符串对象,因此`s2 == s3`的结果为`true`。最后,`s3`被赋值为另一个相同的字符串"arit",所以`s3 == s4`同样为`true`。正确答案是:B.arit amit false true。 2. Java继承与对象比较 第二个问题是关于类的构造函数、实例化和方法调用。首先,`SubclassY`继承自`SuperclassX`,但在第5行尝试通过`new SubclassY();`创建`SuperclassX`的实例,这是错误的,因为`SuperclassX`没有公开的构造函数,不能直接实例化。第9行试图在子类对象`objY`上调用父类的`superclassMethodX()`,这是正确的。然而,在第11行,试图通过`objX`获取`superclassVarX`的值,这会抛出`NullPointerException`,因为`objX`实际上是指向`SubclassY`的实例,而非`SuperclassX`,且没有初始化`superclassVarX`。至于`m1.equals(m2)`的判断,由于两个`MyClass`对象的`x`字段都为100,它们在默认情况下不等于彼此,因为它们是不同的对象。因此,`if(m1.equals(m2))`条件不会成立,`System.out.println`语句不会执行。结论是:以上都不对。 这两个问题着重考察了Java中的字符串操作、对象比较以及类继承和构造函数的理解。对于编程练习,理解和熟练掌握这些概念至关重要,特别是字符串的不可变性、对象引用、继承时的权限控制以及方法的调用方式。