首先来看一段代码:
public class ExtendDemo { public static void main (String[] args) { SuperClass superClass = new SuperClass(); SuperClass subClass = new SubClass(); superClass.find();//根据对象引用类型决定调用父类或子类的方法 subClass.find(); //根据对象引用类型决定调用父类或子类的方法 System.out.println("+++++++++++++++++++++++++++++++++"); superClass.test(); subClass.test(); System.out.println("+++++++++++++++++++++++++++++++++"); SubClass subClass1 = new SubClass(); superClass.find();//根据对象引用类型决定调用父类或子类的方法 subClass1.find(); //根据对象引用类型决定调用父类或子类的方法 } } class SuperClass { public static void find () { System.out.println("find"); } public void test () { System.out.println("superclass test method"); } } class SubClass extends SuperClass { public static void find () { System.out.println("hello"); } @Override public void test () { System.out.println("subclass test method"); } }
运行结果:
find find +++++++++++++++++++++++++++++++++ superclass test method subclass test method +++++++++++++++++++++++++++++++++ find hello
由上面的结果可以看出:静态方法没有被重写;上面的例子总子类中有相同声明的静态方法, 具体调用父类中的方法还是子类中的方法是根据对象引用的类型来决定,如果对象引用类型是父类,就调用父类中的find()方法,如果对象引用是子类,就调用子类的静态方法;这与重写的概念不相符,重写的概念是根据对象实际类型来调用具体的方法
上面main方法的java的字节码:
new com/malone/pattern/SuperClass dup invokespecial com/malone/pattern/SuperClass/<init>()V astore_1 new com/malone/pattern/SubClass dup invokespecial com/malone/pattern/SubClass/<init>()V astore_2 aload_1 pop invokestatic com/malone/pattern/SuperClass/find()V //调用父类的find方法,invokestatic 指令调用静态方法,根据对象引用类型判断调用方法 aload_2 pop invokestatic com/malone/pattern/SuperClass/find()V //调用父类的find方法,invokestatic 指令调用静态方法,根据对象引用类型判断调用方法 getstatic java/lang/System/out Ljava/io/PrintStream; ldc "+++++++++++++++++++++++++++++++++" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V aload_1 invokevirtual com/malone/pattern/SuperClass/test()V aload_2 invokevirtual com/malone/pattern/SuperClass/test()V getstatic java/lang/System/out Ljava/io/PrintStream; ldc "+++++++++++++++++++++++++++++++++" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V new com/malone/pattern/SubClass dup invokespecial com/malone/pattern/SubClass/<init>()V astore_3 aload_1 pop invokestatic com/malone/pattern/SuperClass/find()V //调用父类的find方法,invokestatic 指令调用静态方法,根据对象引用类型判断调用方法 aload_3 pop invokestatic com/malone/pattern/SubClass/find()V //调用子类的find方法,invokestatic 指令调用静态方法,根据对象引用类型判断调用方法 return
invokevirtual 指令调用实例方法,调用实例方法的时候才会根据对象的实际类型来调用具体的方法,才能实现重写
相关推荐
伪静态URL重写实际就是以静态地址(如:http://127.0.0.1:8080/pro/index.html)访问地态网页的方法(如:http://127.0.0.1:8080/pro/index.jsp)。 伪静态URL重写是通过微软公司封装好了的一个URL重写组件...
* 非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果; 静态方法属于类,是不能被重写,故而也不能实现多态。 * 下面是具体的验证过程 首先,定义一个超类A,里边定义一个静态方法和一个非...
1、重载 方法的重载是同一个类中多态性的一种表现。 方法重载须遵循如下两条规则 (1)方法名相同。 (2)参数列表不同。 注意:方法的返回值类型不能用来区分重载的方法。... (5)静态方法不存在重
本篇文章是对java中静态方法的重写问题进行了详细的分析介绍,需要的朋友参考下
Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。 在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。 但有时子类并不想原封不动地继承父类的方法,...
伪静态(url重写)伪静态(url重写)伪静态(url重写)
这段代码用于学习接口时,更加深刻理解接口静态、默认(可重写)、接口中的方法、多实现、多继承等知识点。
关于子类能否重写父类的静态方法,对像我这种初级的编程爱好者来说仍是值得讨论的一件事,下面我们通过具体实例,对此问题进行简单的探索。
创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完! 2.创建主方法调用类 里面有源码,导入myeclipse执行
静态关键字用于修饰类的成员(方法、变量、代码块),使其在类加载时被初始化,并且可以通过类名直接访问。静态成员属于类本身,而不是类的实例。静态方法无法访问非静态成员。 4.什么是Java的final关键字? final...
IOS 静态方法与动态方法详解 ... 从根本来说,c++、objective-c、java都发源于c语言,因此这些语言实际上可以理解了经过封装的c语言,所以它们更加方便使用但效率不如c语言。 因此,对象的底层实际上就是结构体
抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法(native),是否可同时被 synchronized? ``` 都不能。 1.抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。 2.本地...
4.Java多态的体现方式方法的重载,重写,对象的多态性 1.编译时的多态:方法重载(个数、类型、顺序) 2.运行时多态:重写,对象的多态性(父类的引用指向子类的实例) 5.CSDN 1.泛型的好处 保护类型安全 避免...
一、简答题 1.编译java程序使用什么命令?运行java使用什么命令?...区别:方法重载没有继承、属于一种静态联编技术。 方法重写有继承、属于动态联编技术。 10.什么是抽象类?什么是接口?抽象类与接口的区别?
主要介绍了浅谈Java中的重载,重写,多态,静态绑定、动态绑定,具有一定借鉴价值
8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 10、string 转换成 integer的方式及原理 11-20题: 11、哪些...
urlrewrite重写demo,伪静态技术实现
* (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的但具体方法中的成员是否被子类修改需要进行分析) —> * 下一层次的父类中重复前一个过程
幸运的是,现在有专门的开源框架可以简化URL重写的任务。本文将重点介绍UrlRewriter框架,该框架配置简单,使用方便。 首先,我们来探讨使用URL重写为网站带来的几大好处: 1. **提升搜索引擎优化(SEO)**:考虑到...