文案短句干净治愈,专业seo整站优化,电脑网站生成手机网站,谷歌app下载 安卓我们知道在JAVA中可以通过overRide来增强或减弱父类的方法和行为#xff0c;但覆写是针对非静态方法的#xff0c;不能针对静态方法#xff08;也叫类方法#xff09;#xff0c;为什么呢#xff1f;看一下下面的例子#xff1a; View Code
public class OverRideTepubl…我们知道在JAVA中可以通过overRide来增强或减弱父类的方法和行为但覆写是针对非静态方法的不能针对静态方法也叫类方法为什么呢看一下下面的例子 View Code
public class OverRideTepublic static void main(String[] args){ Father fathernew Son(); father.print1(); father.print2(); } } class Father{ public static void print1(){ System.out.println(我是父类静态方法); } public void print2(){ System.out.println(我是父类非静态方法); } } class Son extends Father{ public static void print1(){ System.out.println(我是子类静态方法); } public void print2(){ System.out.println(我是子类非静态方法); } }1 public class OverRideTest {2 3 public static void main(String[] args){4 Father fathernew Son();5 father.print1();6 father.print2();7 }8 9 }
10 class Father{
11 public static void print1(){
12 System.out.println(我是父类静态方法);
13 }
14 public void print2(){
15 System.out.println(我是父类非静态方法);
16 }
17 }
18 class Son extends Father{
19 public static void print1(){
20 System.out.println(我是子类静态方法);
21 }
22
23 public void print2(){
24 System.out.println(我是子类非静态方法);
25 }
26 } 看程序子类son覆写了父类father中的print1print2方法按道理来说应该都是执行覆写后的方法然而 运行之后结果 我是父类静态方法我是子类非静态方法 分析原因 son的两个覆写区别仅仅在是否有static每个实例对象都有两个类型一个是表面类型一个是实际类型表面类型是在声明时得到的实际类型是对象产生时的类型例子中Father是表面类型Son是实际类型对于非静态方法而言是根据对象的实际类型来执行而对于静态方法则比较特别首先静态方法不依赖于实例对象通过类名来访问其次可以通过对象访问静态方法如果是通过对象访问JVM是通过对象的表面类型来找到静态方法的入口因而执行Father中的静态方法。 转载于:https://www.cnblogs.com/yuwenfeng/archive/2013/05/09/3069152.html