面试题:为什么java不允许 super.super.xxx
面试题:为什么java不允许 super.super.xxx 这样的语句?
[解决办法]
super是调用父类的东西,一般super只能在方法内实现,方法外好像不能用。
[解决办法]
super.super ???
似乎没必要吧,派生类不就已经包含了基类中的所以属性和方法了吗?所以一个super就可以调用到它之上所有级的父类的方法了
[解决办法]
super.super.xxx是不是就相当于多继承了java不允许啊?
[解决办法]
一个super可以调用它所有extends的父类的一些方法和一些变量,没有必要用super.super了。
[解决办法]
你可以按照下面方式理解:
super是当前类的私有成员,代表着父类,
super.super的意思是要访问父类中的私有成员,这个是不可能访问得到的吧~
[解决办法]
五楼正确
[解决办法]
[解决办法]
来学习的~~~
[解决办法]
学习了
[解决办法]
学到东西了人~~~~~~
[解决办法]
如果你需要调用super.super.xxx那就说明你设计的有问题,根本就应该继承super上面的类
[解决办法]
[解决办法]
学到东西并留言。。。
[解决办法]
理解为super包括所有的父类,自然包括了直接父类的父类,所有就没有super.super.×××之说了。
[解决办法]
学习
[解决办法]
like 14#
因为有这么一说 immediate superclass
super的确可以理解为所有超类的一个集合抽象 虽然super.x表示的是直接父类成员调用
毕竟要调用某层祖先类 有更直接的方式
- Java code
((ancestorType)this).x
[解决办法]
个人认为那是重复了
脱了裤子放屁 多此一举
[解决办法]
不太清楚,是不是怕有二义性,比如多重继承时?
[解决办法]
[解决办法]
Object getSuper()
可以返回,super.getClass().newInstance();
不能返回,super
说明super很特殊,不能理解成私有成员
哪家公司出这种面试题哦!?
[解决办法]
[解决办法]
[解决办法]
super.super.xxx当然上不可以的
更本就没这样说法
只有................
[解决办法]
------解决方案--------------------
也真难为这个出题的人了
[解决办法]
super 在编译器解释成为一种特殊的this操作 ,难道你可以this.this这样写么?
楼主能明白了么?
[解决办法]
看到现在 还是不知道 为什么不能够这样使用!!
有谁可以明确地给个解释?
[解决办法]
这么简单的连我个菜鸟都能很自信的回答 JAVA不允许多继承啊
[解决办法]
5楼的理解独到
[解决办法]
super看一下这个方法的声明就应该知道了
[解决办法]
mark....
[解决办法]
子类继承了父类的所有方法和成员变量,比如说B extends A, 然后C extends ,
B 继承了A的所有方法和成员变量,C调用直接父类B中的成员,没有必要引用间接父类.
[解决办法]
如果你用了super,不就说明这是子类吗?而子类总是会继承父类的非私有(非静态)字段,即直接父类已经继承了其所有父类的成员和方法,super.super.xxx就不需要了... 个人理解,如有不对之处还请各位指正...
[解决办法]
又学到一点,呵呵。谢了!
[解决办法]
我认为当super 时就已经实例化它所有的父类的构造器了。那么再一个super 又是什么意思!当然不合理了
[解决办法]
从内存中的形势角度看,super指向的是 子类对象中父类的对象,super.super就说明父类的对象中的父类对象,待时内存在加再代码时,没有必要把子类中所有的祖宗都加载进来,所以super.super.xxx是错的
[解决办法]
- Java code
class A{ public void f(){ System.out.println("A.f()"); }}class B extends A{ public void f(){ System.out.println("B.f()"); }}class C extends B{ public void f(){ super.super.f();//想想这种情况下怎么办,也许有些人认为这种做法在实际应用中不会出现, //但是如果真要这么做,怎么解决 System.out.println("C.f()"); }}
[解决办法]
Java中所有的类都是继承制Object,那么如果你写一个类,如:
public class A {}
也就是说你的类A默认继承了Object,等同于
public class A extends Object {}
如果你的类A里面有一个方法去调用super.super.xxx
这个时候你说调用的是什么呢?
所以java不允许调用super.super。
这才是根本的原因。
[解决办法]
[解决办法]
面试题比较变态,谁会用super.super?
[解决办法]
可不可以这样理解?
子类的构造方法中如果什么都没有写的话其实是隐含了调用父类的无参的构造方法super();
即
class A{
A(){
}
}
class B extends A{
B(){
}
}
等价于:
class B extends A{
B(){
super();
}
}
所以如果有class C extends B{}的时候
C的构造方法会super();的构造方法,而B的构造方法会自动super();A
当然A会super();Object
所以根本就不需要super.super.xxx
[解决办法]
class A{
public void f(){
System.out.println("A.f()");
}
}
class B extends A{
public void f(){
System.out.println("B.f()");
}
}
class C extends B{
public void f(){
super.f();//想想这种情况下怎么办,也许有些人认为这种做法在实际应用中不会出现,
//但是如果真要这么做,怎么解决
//不能用super.super.f();
System.out.println("C.f()");
}
}
public class SuperTest
{
public static void main(String args[])
{
C c= new C();
c.f();
}
}
运行结果:
B.f()
C.f()
对C类建立的对象怎么能运行出A.f()呢?
[解决办法]
向各位学习了
[解决办法]
学习受益中…
[解决办法]
public class Exmple4 {
public static void main(String[] args){
C a=new C();
a.f();
}
}
class AA{
public void f(){
System.out.println("AA.f()");
}
}
class B extends AA{
public void f(){
super.f();
System.out.println("B.f()");
}
}
class C extends B{
public void f(){
super.f();
System.out.println("C.f()");
}
}
[解决办法]
继续关注.....
[解决办法]
很独特的问题,值得关注。
[解决办法]
请各位看清楚LZ问的是“为什么java不允许 super.super.xxx 这样的语句?”请不要无根据的猜测,没意思。从问题的反面来想想看,如果可以会发生什么问题。
[解决办法]
如果父类已经调用了super,你再调用super.super不就脱裤子放屁了?
如果父类没有调用super,你调用super.super,那就说明继承错了。本来是父亲辈分的,但 你偏要弄成孙子辈分还要直接继承爷爷的特征。
[解决办法]
真是众说纷纭,我这菜鸟是越看越糊涂.