A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cat73   /  2016-7-12 11:43  /  10361 人查看  /  50 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

悬赏分数提高点啊
回复 使用道具 举报
通过super调用父类的方法

举例:

public class Father{//定义父类
   public void s(){//定义父类的方法s
   }
}
public class Son extends Father{//定义子类son,继承父类father
   public void s(){//定义子类的s方法,覆盖了父类的s方法
     super.s();//通过super调用父类的s方法
   }
}

补充:

Java中,在继承关系中,super指向当前对象里面的父对象
回复 使用道具 举报
首先,super要在类的声明中调用,再创建的对象中无法通过 对象名.super来进行。
想要用C类调用A类中的方法,就要在类声明的时候下功夫;
class A {
        public void xxx(){
                System.out.println("A");
        }
}
class B extends A {
        public void xxx(){
                System.out.println("B");
        }
       
    public void A_xxx() {           //用A_xxx()方法调用A类中的xxx()方法
                super.xxx();
        }
}
class C extends B {
        public void xxx(){
                System.out.println("C");
        }
       
    public void B_xxx() {                    //用B_xxx()方法调用B中的xxx()方法
                super.xxx();
        }
}
类中的代码就这样了,
使用的时候:
C c = new C();
c.A_xxx();
c.B_xxx();
由于方法已经被重写,在创建对象之后是无法加以访问的,必须在类中创建新的方法来调用

点评

其实有时候这个 B 类是难以修改的,所以我想知道如何直接调用,不过似乎无解。。。  发表于 2016-7-28 11:00
回复 使用道具 举报
13411939415 发表于 2016-7-28 10:52
首先,super要在类的声明中调用,再创建的对象中无法通过 对象名.super来进行。
想要用C类调用A类中的方法 ...

直接调用时办不到的,方法已经重写了
回复 使用道具 举报
其实有方法的,得去问谷歌程序员,他们既然能添加super作为调用父类的关键字,自然能做出来调用父类的父类的关键字,所以不是没有方法,只是我们技术不够!
回复 使用道具 举报
目前好像是       如果希望调用父类中的方法,则需要通过父类创建类的实例,然后通过该实例才能访问父类定义的方法。   此父类是题中的A类,     在方法的重写的面试题中,看到很多答案好像就是是这么说的
回复 使用道具 举报
本帖最后由 彭鸿儒 于 2016-8-16 17:34 编辑

你忘了暴力反射??????只要类里有的都可以拿来用
回复 使用道具 举报
本帖最后由 彭鸿儒 于 2016-8-16 17:59 编辑

刚刚一个答案说的太含糊了,重新回答
首先super这个隐式参数是类私有的,也就是子类中是无法使用父类的super的,那么我们也就无法调用父类的父类中被覆盖的方法,
           
额,失败了,A是抽象类连实例都无法获得,即使用暴力反射获得了A中的xxx方法,没有A的实例任然无法调用A中被覆盖的方法
容我再想想
B中可以添加方法吗?还是A,B,C三个类是不能改变的
回复 使用道具 举报
这个属于"匿名内部类"的问题
回复 使用道具 举报
本帖最后由 lrwillinggerry 于 2016-8-19 14:00 编辑

这个属于"匿名内不类"的问题

根据:
new 抽象类名或者接口名(){
        重写方法;
}
可得:
class C extends B {
        public void xxx() {
           new A(){}.xxx();
        }
}

以上代码的意思为:
由于A为抽象类,要能够在C的xxx()方法实例化一个A的子类并在里面创建该子类的对象调用A的xxx()方法才能访问A的方法,如下:
class C extends B{
     public void xxx() {
        class test extends A{
        }
        Test t = new Test();
        t.xxx();
     }
}
又根据以上匿名内部内的公式,可简化成:
class C extends B {
        public void xxx() {
           new A(){}.xxx();
        }
}   
注意:A中没有抽象方法,所以大括号里面不需要重写xxx()方法.
综上可得:
public class HelloWorld {

        /**
         * @param args
         */
        public static void main(String[] args) {
                C cc = new C();
                cc.xxx();

        }
}

abstract class A extends Object {
        public void xxx() {
                System.out.println("A");
        }
}

abstract class B extends A {
        public void xxx() {
                System.out.println("B");
        }
}

class C extends B {
        public void xxx() {
                new A() {
                }.xxx();
        }
}

点评

我是说在当前对象  发表于 2016-8-19 18:49
回复 使用道具 举报
lrwillinggerry 发表于 2016-8-19 13:59
这个属于"匿名内不类"的问题

根据:

在main中创建的是当前对象啊
回复 使用道具 举报
可以在父类的方法中在用super.XXX()来访问父类的父类中的方法。这是取巧的方法,不知能不能帮助到你。
回复 使用道具 举报
6666666666666,看不懂
回复 使用道具 举报
你都重写了,记住重写的目的就是让子类更强,拥有更多属性,你要回去调用就违背这一原则,不然就不要重写,或者从父类到子类都用super()一下,那么爷爷的方法输出的东西以及父类输出的东西在子类方法实现调用时,都会输出
回复 使用道具 举报
静看大神们
回复 使用道具 举报
要是把你写的方法都写成静态的方法呢
回复 使用道具 举报
楼主 要逆天啊!
回复 使用道具 举报
本帖最后由 浪弦丶 于 2016-11-17 00:41 编辑

/*
    需求:我希望在不改变A类和B类的代码,并且C类要继承B类的前提下,
         在C类的XXX方法中调用A类的XXX方法。
    分析:并没有说在C类方法里面不能传参。

*/

   abstract class A extends Object {
        public void xxx() {
            System.out.println("A");
        }
    }
   
    abstract class B extends A {
        public void xxx() {
            System.out.println("B");
        }
    }
   
    class C extends B {
        public void xxx(Object A) {
           this.get();

        }
    }

public class ATest {
        public static void main(String[] args) {
                A a =new C();
            //这里掉A的get方法其实就是调B覆盖方法
                a.get();
        }
        

}
回复 使用道具 举报
liudan 中级黑马 2016-11-24 14:02:23
39#
使用super关键字就可以访问被子类重写的方法。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马