根据java,实例方法解析基于参数的运行时类型.
但是在解析实例变量时,它使用不同的方法,如下所示.
节目输出是......
Child
Parent
ParentNonStatic
Run Code Online (Sandbox Code Playgroud)
这里第一个输出基于参数的运行时类型,但第三个输出不是.
任何人都可以解释一下吗?
public class Child extends Parent {
public static String foo = "Child";
public String hoo = "ChildNonStatic";
private Child() {
super(1);
}
@Override
String please() {
return "Child";
}
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
//Resolving method
System.out.println(((Parent) c).please());
//Resolving Static Variable
System.out.println(((Parent) c).foo);
//Resolving Instance Variable
System.out.println(((Parent) c).hoo);
}
}
class Parent {
public static String foo = "Parent";
public String …Run Code Online (Sandbox Code Playgroud) 我想我错过了一些东西,或者没有点击我的东西.我正在读一本关于java的书,我刚学到了super().当用于获取构造函数时,它从一个超类中获取构造函数,对吗?如果你想去两个超级课程怎么办?怎么办呢?
有些东西并没有坐在我的大脑中,我希望这个问题可以帮助我把各个部分放在一起.
class A {
int i = 10;
}
class B extends A {
int i = 20;
}
public class C extends B{
int i = 30;
public static void main(String[] args) {
C c = new C();
c.m1();
}
public void m1() {
System.out.println(i); // 30
System.out.println(super.i); // 20
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个A类,它包含一个默认变量.我创建子类乙延伸类阿和一个以上的子类Ç延伸类乙.
我想在子类C方法中访问类A变量.有没有直接访问它的方法? m1()
我知道你可以super.super.methodName()用来调用祖父母的方法版本,但有没有办法在链式构造函数调用中直接调用祖父母类的构造函数?
(简体)示例:
class A {
public A(){}
public A(int i, boolean b) {
/*...*/
}
}
class B extends A {
public B(){}
public B(int i) {
super(i, true);
}
}
class C extends B {
public C(int i)
{
super.super(i,false); //This is not allowed, but you
//can see what I'm trying to do (call A(i,false).)
//this=new A(i,false); also doesn't work b/c this can't be LHS
//of assignment
}
}
Run Code Online (Sandbox Code Playgroud)
..或者这是不允许的,我是否只是在尝试在(父)超类中使一个super.superclass(祖父母)构造函数调用不可能的时候证明了这样做的原因?