1. class A {
2. protected int method1(int a, int b) { return 0; }
3. }
Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }
我个人觉得选A与D  
有人说A与C
有人帮我解释一下 谢谢了

解决方案 »

  1.   

    很明显是A和C呀
    A是覆盖
    C是重载
      

  2.   

    只有A.
    A是覆盖.
    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
      

  3.   

    我觉得是BC父类中是保护型的到子类中是私有型所以选B,至于C应该很明显
      

  4.   

    现在有点明白了
    应该是选择A与CA为覆盖父类的方法
    C为重载子类的方法D应该为invalid的,因为重载方法不能根据返回类型来确定
    E没有见过这种的,不知道为什么错的
    B,应该是因为子类不能比父类范围小不知道是不是这样?!
      

  5.   

    这个题目选AC。理由是:
    A是覆盖。
    C是重载。B:子类的可见权限不能比父类低。(可见权限从高到低为public, protected, private);
    D:如果认为是覆盖的话,返回值不一样;如果认为是重载的话,参数又完全一样。这样是不行的。
    E:静态方法和实例方法完全一样,也是不行的,静态方法不能够覆盖实例方法。假如子类叫AChild,在编译的时候会报错:
    method1(int ,int) in AChild cannot override method1(int,int) in A; overriding method is static.
      

  6.   

    选A ,C
    A覆盖,派生类访问权限要高于基类;
    C重载,参数类型改变了;D重载只能根据参数的类型和个数来判断,返回值却不能成为重载的依据;
      

  7.   

    首先
    既然继承,方法的返回类型必须相同,所以D不对方法名,参数相同的是覆盖覆盖不能:
    1.降低原方法的"可见度"
    2.改变原方法的返回值类型
    A是覆盖,且符合上面规则,所以A对
    B(想成为覆盖),但是它降低了可见度,所以B不对
    D,改变了返回值类型,所以D不对
    重载
    方法名相同,参数不同构成重载,
    "可见度",返回类型不同都不能构成方法的重载C就是重载
    重载,也就可以看做是在子类中比父类多了一个全新的方法
    既然是全新的方法,不管在已经构成重载的方法中改变返回值类型,还是可见度,都成立
      

  8.   

    CSDN有个最大的不好,自己的帖子不能编辑....烦
      

  9.   

    A. 覆盖
    B. 子类的可见权限不能比父类低
    C. 重载
    D. 返回类型不同,编译器无法区分是哪个方法,所以不对。
    E. 不知道
      

  10.   

    是A和C
    D的返回类型变了,这是不允许的,因为这既不是重载(要求函数的参数签名变化),又不是重写(要求函数签名相同)。
    另外,子类中的函数如果重写父类的,可见性一定要大于等于父类函数的可见性。
    C的函数是重载了class A中的函数,所以正确。public class A 
    {
    protected int m(int a, int b){
    System.out.println("A");
    return 0;
    } public static void main(String[] args)
    {
    A b = new B();
    A a = new A();
    a.m(1, 5);
    b.m(1,5);
    }
    }class B extends A
    {
    public int m(int a, long b)
    {
    System.out.println("B");
    return 0;
    }
    };打印结果为:
    A
    A可见两个对象对m的调用都是父类中的方法。
    在实际编程中应该尽量避免这种写法。
      

  11.   

    C对么?表示质疑,参数int型和long的区别可以么?方法重载的参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。
      

  12.   

    1. class A {
    2. protected int method1(int a, int b) { return 0; }
    3. }
    Which two are valid in a class that extends class A? (Choose two)
    A. public int method1(int a, int b) { return 0; }
    B. private int method1(int a, int b) { return 0; }
    C. private int method1(int a, long b) { return 0; }
    D. public short method1(int a, int b) { return 0; }
    E. static protected int method1(int a, int b) { return 0; }
    首先我们看修饰符  父类是protected
    那么子类只能是默认或者public,因为子类如果是private的话,在多态的时候会引起问题
    而编译的时候是可以通过的
    例如c的情况下,假设父类是A 子类是B 那么不能使用  A a = new B();因为在使用a.method1(……)的时候有问题,所以bc排除 e很明显不对d,也不对,因为重载只能依据参数 而不能依据返回值。只选a完毕。
      

  13.   

    受不了了,就是我这种学c++的也知道应该选BC。学java的都是什么出身,医疗卫生吗?一点程序语言的基本原理都不了解,还有脸解释那么多。
      

  14.   

    liang8305(七分之雨后) ( ) 信誉:100 说的大部分都对
    ————————引用一下——————————首先
    既然继承,方法的返回类型必须相同,所以D不对方法名,参数相同的是覆盖覆盖不能:
    1.降低原方法的"可见度"
    2.改变原方法的返回值类型
    A是覆盖,且符合上面规则,所以A对
    B(想成为覆盖),但是它降低了可见度,所以B不对
    D,改变了返回值类型,所以D不对
    重载
    方法名相同,参数不同构成重载,
    "可见度",返回类型不同都不能构成方法的重载C就是重载
    重载,也就可以看做是在子类中比父类多了一个全新的方法
    既然是全新的方法,不管在已经构成重载的方法中改变返回值类型,还是可见度,都成立----------------可是最后一段话错了————————————在java里面 如果重载的话,子类的方法不能比父类的方法的参数更“大”
    比如父类是int  子类就不能是long 比如我们写
    class A{
    protected int a(int c){
     return 0;}  }
    class B extends A{
     int a(long c){
       return 1;
     }
     public static void main(String args[]){
       A a = new B();
       System.out.println(a.a(1));//这里只能用a.a(1)而不能a.a(1l)}}
    }还是在继承中的多态考虑才要求这一点的。