`
jianchen
  • 浏览: 344800 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java基础复习(15)-多态问题强化

阅读更多

多态题目:
题一:

 

class Parent {

      private void method1() {

           System.out.println("Parent's method1()");

      }

      public void method2() {

           System.out.println("Parent's method2()");

           method1();

      }

}

 

class Child extends Parent {

      public void method1() {

           System.out.println("Child's method1()");

      }

      public static void main(String args[]) {

           Parent p = new Child();

           p.method2();

      }

}
 


A. compile time error
B. run time error
C. prints: parent’s method2()  parent’s method1()
D. prints: parent’s method2()  child’s method1()

C is correct.
分析:
        The code will compile without any error and also will not give any run time error. The variable p refers to the Child class object.
        The statement p.method2() on execution will first look for method2() in Child class. Since there is no method2() in child class, the method2() of Parent class will be invoked and thus "Parent's method2()" will be printed.

Now from the method2() , there is a call to method1().

1]Please note that method1() of Parent class is private, because of which the same method (method1() of Parent class) will be invoked.

2] Had this method(method1() of Parent class) been public/protected/friendly (default), Child's class method1() would be called.

Thus C is correct answer.
由以上可知,父类方法如果被修饰为private,子类根本无法访问该方法,不具备可见性,所以你在子类中即使写了一个同样的方法(当然修饰级别要提高),也不构成覆盖。

在netbeans下,我测试了,如果你覆写了一个方法,编辑器会提示你加上@override注解,但你在子类中想覆写一个父类的private方法,却没有提示要加上该注解,也可以证明这根本没有构成覆写,所以要覆写的方法必须修饰级别不能为private。

所以猜想子类构成覆写的方法才能以多态的方法调用。

题二:

 

class Parent {
       public static int countA = 10;
       public  int countB = 20;
       public static void methodA() {
              System.out.println("methodA() in Parent " + countA);
       }

       public void methodB() {
              System.out.println("methodB() in Parent " + countA + countB);
       }
}

public class Child extends Parent {
       public static int countA = 30;

       public  int countB = 40;

       public static void methodA() {
              System.out.println("methodA() in Child  "+ countA );
       }
       public void methodB() {
              System.out.println("methodB() in Child  "+ countA + countB);
       }
       public static void main(String[] args) {
              Parent parent = new Child();
              parent.methodA();
              parent.methodB();
       }
}
 



KEY:
methodA() in Parent 10
methodB() in Child  3040
分析:
对于静态方法,也不构成多态。因为静态方法不依赖于类的实例,根据变量的类型,就可以找到对应的静态方法,无需考虑多态。

题目三:

 

class Base{
       int i = 99;
       public void amethod(){
              System.out.println("Base.amethod()");
           }
           Base(){
            amethod();
            }
       }
       public class Derived extends Base{
       int i = -1;
       public static void main(String argv[]){
            Base b = new Derived();
              System.out.println(b.i);
              b.amethod();
          }
          public void amethod(){
              System.out.println("Derived.amethod()");
          }
       }
 


 分析: In this situation a reference to any of the fields such as i will refer to the value in the Base class
直接访问父类的变量,不会构成多态,访问的永远是父类的成员变量,不过为了访问子类的成员变量可以使用方法来间接访问,这样就可以利用多态了。

分享到:
评论

相关推荐

    java基础学习与复习

    总结一下,"Java基础学习与复习"涵盖了Java编程的核心概念,包括接口的使用来实现松耦合,多态带来的灵活性,I/O流的管理以处理数据,以及线程的运用以实现并发执行。深入理解和掌握这些知识点,对于任何Java开发者...

    一点Java复习资料

    Java是一种广泛使用的面向对象的编程语言,...通过这些复习资料,开发者可以全面地回顾和强化Java编程技能,为面试或项目开发做好准备。对于每个知识点,深入理解和实践是提高的关键,理论结合实际案例会使学习更有效。

    java基础姿势点巩固

    根据给定的信息,“Java基础姿势点巩固”这一标题与描述暗示了文章主要聚焦于Java编程语言的基础知识复习与强化。由于提供的具体内容仅有一个单词“hollow”,无法从中直接获取更多信息,因此,本篇将围绕Java基础...

    JAVA期末考试复习题

    "JAVA复习.doc"很可能是教师提供的复习大纲或重点,包含课程中的核心知识点。这部分内容需要深入理解并能够灵活运用。注意复习Java集合框架(如ArrayList、LinkedList、HashMap等)、异常处理、IO流、线程、网络编程...

    java基础大全(文档整理,内含面试题)

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而...这份文档整理无疑是学习和复习的良好参考资料,特别是其中的面试题部分,能够帮助开发者检测自己的掌握程度,并针对性地进行强化训练。

    java复习试卷5张

    这份"java复习试卷5张"提供了深入学习和巩固Java知识的机会。每张试卷都可能涵盖了Java的基础概念、语法特性、面向对象编程原则、异常处理、集合框架、多线程、输入/输出流、网络编程、反射机制以及Java开发工具(如...

    java复习题

    本资源包含一系列的Java复习题目,旨在帮助学习者巩固基础知识,提高编程技能。这些题目覆盖了Java语言的核心概念,包括但不限于语法、面向对象编程、异常处理、集合框架、多线程、输入输出流、网络编程以及JavaSE和...

    JAVA面试基础题软件

    【JAVA面试基础题软件】是一款专门针对JAVA程序员面试设计的学习工具,它包含了多套精心整理的JAVA面试基础题目,旨在帮助用户巩固JAVA编程基础知识,并在面试前进行有效的强化练习。这款软件涵盖了JAVA语言的核心...

    java面试题-200题

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了在竞争激烈的Java开发者市场中脱颖而出...通过"java面试题-200题"的文档,求职者可以全面复习和强化这些关键领域,为面试做好充分准备。

    Java ppt 北大青鸟培训

    - **基础语法强化**:讲解Java基本语法和编程习惯,确保学员能熟练编写Java代码。 - **类与对象实践**:通过实际案例,让学员掌握如何创建和使用类与对象。 - **异常处理**:学习如何处理运行时错误,增强程序的...

    基于项目驱动的Java编程基础教学研究与实践-熊威.pdf

    2. 知识点融入项目:在项目中巧妙地融入Java的基础知识点,让学生在实践中自然地理解和掌握这些概念,如类、对象、继承、多态等。 3. 强化实践指导:教师需在项目实施过程中提供持续的指导,解答学生的疑惑,引导...

    JAVA笔试题大集合及答案

    通过这个“JAVA笔试题大集合及答案”压缩包,你可以系统地复习和测试自己的Java知识,找出不足,强化理解,从而提高在实际工作中解决问题的能力。记得不仅要了解答案,更要理解其背后的原理和应用场景,这样才能真正...

    2018年java学习计划-范文模板 (16页).docx

    **推荐资源**:阅读《Java大学简明教程》、《Java语言程序设计(基础篇)》以及观看马士兵的Java视频教程。 **实践项目**:在每个阶段结束时,完成一个小项目,例如坦克大战、贪吃蛇等,以巩固所学知识。 **第二部分...

    java面试宝典

    这本书详细讲解了JavaSE基础、多态、异常处理、常用API、数据类型等重要概念,并且通过具体的问题和场景来强化理解。 在JavaSE基础部分,书中首先探讨了面向对象编程的四个基本特性:封装、继承、多态和抽象。封装...

    期末复习资料(1).rar

    2. "复习素材3.pdf" - 虽然没有特别标注,但通常这类文件都是按照知识点的逻辑顺序排列的,所以这份文件可能是对前两份复习素材的补充,可能涵盖了类、对象、继承、多态等Java基础知识。 3. "复习素材4.pdf" - 同理...

    任亮java资源第一阶段4

    【描述】的重复性表述暗示了这些资源是针对"任亮java第一阶段资料"的强化,意味着它们可能包括了多次迭代或不同的复习材料,旨在确保学习者能够牢固掌握初阶Java知识。 【标签】"java"明确指出这个资源包与Java编程...

    笔试题java&.net全集收录

    标题中的“笔试题java&.net全集收录”表明这是一个包含Java和.NET技术领域笔试题目的集合,可能涵盖了这两门编程语言的基础知识、高级概念、框架应用以及开发实践等内容。这些题目可能是为了招聘过程中的技术筛选而...

    complete java2 certification

    5. **复习篇**:总结所有知识点,提供大量模拟试题和答案解析,强化复习效果。 #### 内容亮点 - **面向对象编程**:深入理解类、对象、继承、封装、多态等核心概念。 - **Java集合框架**:掌握List、Set、Map等...

    JAVA教学计划

    例如,第一周会介绍面向对象程序设计概述和Java开发环境,第二周至第三周会深入学习Java语言基础,第四周至第五周则会涉及类的继承、方法的重写和多态等核心概念。随着课程的推进,还将涵盖数组、字符串处理、GUI...

    面向对象技术复习指南

    本复习指南旨在帮助读者提升程序设计能力并强化问题解决分析技巧。 1. 访问修饰符的选择: - 对于类中的成员变量,如果希望在同一包内可访问,应使用`protected`约束符,而不是`private`(私有)、`public`(公共)或...

Global site tag (gtag.js) - Google Analytics