加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 覆盖 – 参数差异

发布时间:2020-12-15 05:00:58 所属栏目:Java 来源:网络整理
导读:public class A{ public static int x = 1; public int m(A a,B b){ return a.m(b,b) + x; }}public class B extends A { public int m(A a1,B a2){ if(a1 == a2) return x; return super.m(a1,a2); }} 这是我过去考试的一个问题. public class Main{ public
public class A{
    public static int x = 1;
    public int m(A a,B b){
        return a.m(b,b) + x;
    }
}

public class B extends A {
    public int m(A a1,B a2){
        if(a1 == a2)
            return x;
        return super.m(a1,a2);
    }
}

这是我过去考试的一个问题.

public class Main{
    public static void main(String[] args){
        B b1 = new B(){int m(A a,A b){ return 10; }};
        System.out.println(b1.m(b1,b1));
    }
}

问题是,以下输出是什么.我在答案1中是对的.但我没有完全理解为什么.

由于B对象的内部类是(A,A).我是否正确认为它不能覆盖超级方法m,因为它是(A,B)?如果交换了两个方法的参数,它是否能够覆盖?

既然它既不能覆盖也不能超载,它什么都不做,只是在B类中使用方法m?

对象的内部类是否仅适用于自身?它就像一个异类吗?

为所有问题道歉.

提前致谢.

编辑:

从我到目前为止的理解,因为静态类型设置为B,所以类型B无法看到anon类.如果将其设置为公开,则可以看到它,但仍然不会使用它.

这使我对另一个问题感到困惑.

public class A{
    public static int x = 1;
    public int m(A a,b) + x;
    }
}

public class Main{
 public static void main(String[] args){
  A a1=new A();
  A a2=new A(){ 
   int m(A a,B b){
    return 10;
   }};
  B b1=new B();
  System.out.println(a1.m(a2,b1));
 }
}

调用以下内容时,输出为11.
当调用a1.m时,它传递a2和b1.

在A类中,当调用a.m(b,b)时.它调用动态类型.这是因为一旦解析它会变为动态类型吗?那么现在它可以使用anon类了吗?

解决方法

这里有几点:

>匿名内部类中的方法不公开,因此无法覆盖公共方法.如果必须覆盖非抽象方法,请始终使用@Override.
> b1的(静态)类型是B,因此匿名类型中声明的额外方法不可用.虽然你可以做以下事情:

B b1 = null;
System.out.println(new B(){int m(B a,B b){ return 10; }.m(b1,b1));

要么

final B b1 = null;
    new B() {
        {
            System.out.println(this.m(b1,b1));
        }
        int m(B a,B b) { return 10; }
    };

>语言选择具有最具体参数(如果存在)的覆盖,而不是最不具体的参数.在前面的示例中进行了更正例如System.err.println(“donkey”.toCharArray());不会调用println(Object).>重写方法可以放宽返回类型,“协变返回类型”(自1.5起).当超类型中的泛型参数类型(例如Comparable)中的参数发生时,情况不完全相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读