java 通过子类怎么调用父类已经被重写的方法
来源:互联网 发布:qq变声软件 编辑:程序博客网 时间:2024/05/21 02:50
= =今天看书看到覆盖和重载
我就在想能不能再实例化的子类中调用父类已经被覆盖的方法
百度了很久
除了说super 貌似就不行了
也能在子类中做一个新方法来调用父类已经被覆盖的方法
例如:
import java.io.BufferedReader;public class baidu extends Search {public static void main(String[] args) throws IOException {new baidu().superFunction() ;}public void function(){System.out.println("I am baidu!");}public void superFunction(){super.function() ;}}class Search{public void function(){System.out.println("I am search!");}}
也有人说
A为父类,B为子类,都有一个m()方法
B b = new B();
想通过((A)b).m()
来调用
实际上也是不行的
详见见识:
B b=new B(); 这种方式,实际上是实例化了子类的对象,注意:内存中还是子类对象。((A)b).m(); 表面上看起来是父类对象了,但是由于内存中是子类对象,所以调用的还是子类方法。A b=new B(); b.m(); 这种方法和你写的实际是一个效果,虽然上溯造型到了父类,由于子类重写了父类的方法,调用的还是子类的方法(也就是所:方法的实现,最后是在子类中实现的)。所以,总结如下:如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父类的内存中实现,可以调用父类方法。如果子类重写了父类的方法,那么,你虽然上溯造型到了父类,由于内存还是子类,该方法的实现还是在子类,所以用实例化的对象是调用不到父类的,这种情况下,只能用super关键字。
综上
如果不是类内部,而是外部调用,比如你例子中的main方法,答案是
不能。你不能调用已经被覆盖掉的父类的方法。
这也是覆盖override的最初设计意图之一。
大多数时候,覆盖父类意味着子类想做些特殊的处理。如果能够跳过子类的特殊处理,就会打开一个无法控制的缺口,会导致很多很多问题。
唯一可以调用父类方法的地方,就只有类内部。子类自己控制,什么时候该调用父类,什么时候做自己的处理。
想到最后才发现自己为啥会纠结这么一个问题=。=
方法被覆盖自然是需要修改
既然修改了为什么还要想着去调用父类中的方法
真是多此一举
- java 通过子类怎么调用父类已经被重写的方法
- Java 子类未重写的方法调用父类还是子类的问题
- java 子类重写父类的方法
- java 子类重写父类的方法
- java 子类重写父类的方法
- java 父构造器中调用子类重写的方法
- 【Java笔记】继承父类的方法可以调用子类的方法(子类必须在重写相应方法)
- Java调用子类重写方法
- java方法重写的时候,一个调用父类还是子类方法的问题
- Java 中父类怎么调用子类的方法?
- Java 中父类怎么调用子类的方法?
- Java__子类中调用父类重写的方法。
- 例题:子类重写父类方法后的调用规则
- 子类重写父类方法后的调用规则
- Java 父类构造函数中调用子类重写的方法
- Java中,重写的情况下子类调用父类
- JAVA子类方法重写父类方法
- Java反射:通过父类对象调用子类方法
- 为apk签上android.uid.system的名
- oracle 11g安装问题
- as 贪食蛇小游戏(一)
- 黑马程序员_File类
- 使用jQuery实现的网页版的个人简历
- java 通过子类怎么调用父类已经被重写的方法
- 解决Unix环境高级编程示例中的 undefined reference to `err_quit'
- 这样的老师值得我敬佩
- Android 游戏引擎libgdx之Box2D 案例实践——打砖块(一)
- 数据结构笔记之二链表
- 数据结构初学1(线性表)
- open-flash-chart中文使用参数对照表
- 如何不让键盘挡住UITextField控件
- 详解XP托盘图标结构!