java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JAVA覆盖和重写的区别

JAVA覆盖和重写的区别及说明

作者:wangshili程序员

非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性

JAVA覆盖和重写的区别

经常听到两种话

废话不多说直接上图:

package com.wangshili;

public class Main {
	public static void main(String[] args) {
		Father f =new Child();//创建子类对象,父类引用
		f.print();//调用父类方法
	    ((Child)f).print();//向下转型,调用子类方法
	    while(true);
	}
}
/*
 * 重写有多态,调用方法时看对象
 */
class Father{
    public  void print(){
         System.out.println ("这是父类");
     }
}
class Child extends Father{

	public  void print(){
         System.out.println ("这是子类");
     }
}
package com.wangshili;

public class Test {
	public static void main(String[] args) {
		Father f =new Child();//创建子类对象,父类引用
		f.print();//调用父类方法
	    ((Child)f).print();//向下转型,调用子类方法
	    while(true);
	}
}
/*
 * 覆盖没多态,调用方法时看引用类型(静态属于类)
 */
class Father{
    public  static void print(){
         System.out.println ("这是父类");
     }
}
class Child extends Father{
	public  static void print(){
         System.out.println ("这是子类");
     }
}

认真读完上面两份代码

你应该能发现区别了,我总结下:

1.非静态方法,覆盖=重写,有多态

2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方法,所以这里也是一样,只看引用类型,跟创建对象类型无关。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文