Java普通方法与static方法的多态

package cm.java.Practic8;

class Super {

public int field = 0;

public int getField() {

return field;

}

public static String staticGet() {

return "Base staticGet()";

}

public String dynamicGet() {

return "Base dynamicGet()";

}

}

class Sub extends Super {

public int field = 1;

public int getField() {

return field;

}

public int getSuperField() {

return super.field;

}

public static String staticGet() {

return "Derived staticGet()";

}

public String dynamicGet() {

return "Derived dynamicGet()";

}

}

public class FiledAccessP156 {

public static void main(String[] args) {

Super sup = new Sub();

System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField());

Sub sub = new Sub();

System.out.println("sub.field = " + sub.field + ", sub.getField() = " + sub.getField());

System.out.println(sup.staticGet());

System.out.println(sup.dynamicGet());

}

}

输出:

sup.field = 0, sup.getField() = 1

sub.field = 1, sub.getField() = 1

Base staticGet()

Derived dynamicGet()

总结:

方法多态,数据成员不多态。

当Sub对象转型为Super引用时,任何域访问操作都由编译器解析,因此不是多态的。

在本例中super.field和sub.field分配了不同的存储空间。

这里Sub实际上包含两个称为field的域:它自己的和它从super处得到的。

然而,在引用sub中的field时所产生的默认域并非super版本的field域;

想得到supe.field,必须显示的指明super.field。

如果某个方法是静态的,它就不具有多态性,静态方法是与类,并非与单个对象相关联的。

过程:

Super sup = new Sub();

System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField());

Sub sub = new Sub();子类转化为基类,sup.field实际指的基类super的field=1;sup.getField()多态性,指的是sub的field为0

输出:

sup.field = 0, sup.getField() = 1

Sub sub = new Sub();

System.out.println("sub.field = " + sub.field + ", sub.getField() = " + sub.getField());

sub.field实际指的自己的类sub的field=1;sup.getField也指的是自己sub的field为1

输出:

sup.field = 1, sup.getField() = 1

System.out.println(sup.staticGet());

System.out.println(sup.dynamicGet());

如果某个方法是静态的,它就不具有多态性,静态方法是与类,并非与单个对象相关联的。

输出:

Base staticGet() Derived dynamicGet()

java 普通方法_Java普通方法与static方法的多态相关推荐

  1. 是否可以从一个static方法内部发出对非static方法的调用?

    *问题:是否可以从一个static方法内部发出对非static方法的调用?  *   * 答:不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,  *         才可以在 ...

  2. 一个static方法内可以调用非static方法吗?

    不可以. 因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用. 也就是说,当一个 static ...

  3. java测试类 main方法_Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...

  4. java linkedlist 方法_Java LinkedList getFirst()方法与示例

    LinkedList getFirst()方法 (LinkedList getFirst() method) This method is available in package java.util ...

  5. java 线程安全_Java创建线程安全的方法

    原文链接 译者:秦建平 校对:方腾飞 首先来看一个问题: 下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的? public class MyCount { private static i ...

  6. java listfiles 使用_Java中list()和listFiles()方法之间的区别

    java.io包的名为File的类表示系统中的文件或目录(路径名).为了获得目录中所有现有文件的列表,此类提供了list()和ListFiles()方法. 它们之间的主要区别是该列表()方法返回一个字 ...

  7. java clone方法_java安全编码指南之:方法编写指南

    简介 java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方 ...

  8. java stringbuilder清空_Java中StringBuilder的清空方法比较

    StringBuilder 没有提供clear或empty方法. 清空有3种方法: 1)新生成一个,旧的由系统自动回收 2)使用delete 3)使用setLength 将三种方法循环1000万次,代 ...

  9. java file用法_Java File 类的使用方法详解(转)

    转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...

  10. 【JAVA】接口中的default和static方法

    接口中方法都为抽象方法. 这句话在JAVA8之前是对的,在JAVA8之后就错了 传统的理解是接口只能是抽象方法.但是程序员们在使用中,发现很不方便,实现接口必须重写所有方法,很麻烦.所以java设计者 ...

最新文章

  1. 150m虚拟主机容量不足
  2. idea + maven + profile + tomcat 调试 javaee 和js
  3. Oracle PL/SQL进阶
  4. 12C 新特性 | 标量子查询自动转换
  5. 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
  6. 隐藏activity的头部的activity名
  7. Linux批量更改文件后缀名
  8. Linux的NFS(net file systen)
  9. netty权威指南 微云_《Netty权威指南》(一)走进 Java NIO
  10. 函数声明和函数表达式的区别
  11. PTA:设计一个风扇Fan类 (20 分)
  12. JAVA练习题38:正则表达式基本练习
  13. Python必会的12道面试题,看看你会几题?
  14. 1. Emacs使用本地elpa镜像
  15. DLL的远程注入技术详解
  16. 开始读Python Crash Course读书笔记
  17. 01-pie小游戏(基本图形的绘制)
  18. [转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇
  19. 如何通过通达信接口获取最近的分钟级别行情数据?
  20. 云控sdk服务端接口

热门文章

  1. NSString字符串处理
  2. Android ADT 无法在线安装,离线下载ADT压缩包方法。SDK Manager无法更新
  3. js基础-19-判断图片加载完成的方法
  4. bootstrap学习笔记-(1-初识bootstrap)
  5. c语言程序设计的例题,C语言程序设计例题与习题--详细介绍
  6. 计算机应用计算专业难吗,计算机应用专业好学吗
  7. python字符串介绍_Python字符串详细介绍
  8. Springboot属性配置绑定
  9. HTTP的概念以及请求消息的数据格式
  10. flex 连接mysql数据库_Flex+blazeds实现与mySQL数据库的连接(已成功实现此文的例子)...