Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点
一、特点
1,成员变量。
编译和运行都参考等号的左边。
覆盖只发生在函数上,和变量没关系。
Fu f = new Zi();
System.out.println(f.num);//是父类,答案是3
2,成员函数(非静态)。
编译看左边,运行看右边。
因为成员函数存在覆盖特性。
Fu f = new Zi();//
f.show();
输出的是子类里面的show方法
3,静态函数。
编译和运行都看左边。
静态函数不具备多态性,多态性是对象的多态性,然后静态函数不涉及对象。
Fu f = new Zi();//
f.show();
这里最后输出的是父类的show里面的内容。
Zi z = new Zi();//
z.show();
输出的是子类里面的show
二、实例
/*
多态时,
成员的特点:
1,成员变量。
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。哦了。
作为了解。
覆盖只发生在函数上,和变量没关系。
Fu f = new Zi();
System.out.println(f.num);//是父类,答案是3
没根据f的值(子类对象的地址)去找,而是根据f的类型去找。
开发时不可能出现这样的情况,我父类有了,我子类就直接拿来用了,而且用的时候一般都已经向下转型了。 2,成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。 因为成员函数存在覆盖特性。
Fu f = new Zi();//
f.show();
输出的是子类里面的show方法
依赖的是对象,有对象才有成员函数,必须动态的绑定到指定的对象上,所以运行的时候是看子类,而编译的时候检查语 法错误,所以编译的时候检查父类,所以看父类。
编译检查语法错误,运行时根据引用指向的地址运行。 3,静态函数。
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。 其实对于静态方法,是不需要对象的。直接用类名调用即可。
Fu f = new Zi();//
f.show();
这里最后输出的是父类的show里面的内容,因为静态成员不需要对象,直接是被类名指向,都指向存静态方法的方法区, 而那个里面存的就是父类的show。
Zi z = new Zi();//
z.show();
这里的zi是继承fu的,show方法是静态的
输出的是子类里面的show
其实可以理解为静态函数不具备多态性,多态性是对象的多态性,然后静态函数不涉及对象
父类对象引用,就是指向父类的静态函数
子类对象引用,就是指向子类的对象函数 */ class Fu
{
// int num = 3;
void show()
{
System.out.println("fu show");
} static void method()
{
System.out.println("fu static method");
}
} class Zi extends Fu
{
// int num = 4;
void show()
{
System.out.println("zi show");
} static void method()
{
System.out.println("zi static method");
}
} class DuoTaiDemo3
{
public static void main(String[] args)
{
Fu.method();
Zi.method();
//这个的实质是父类对象指向子类引用,就是有点像指针,f的值是子类对象的地址。
Fu f = new Zi();//
// f.method();//输出是父类的静态
// f.show();//编译的时候检查的是父类,运行的时候以子类为主,show被覆盖,运行的子类的show
//输出是子类的show,
// System.out.println(f.num);//是父类,答案是3 // Zi z = new Zi();
// System.out.println(z.num);//是子类,答案是4
}
}
三、内存储存分析
Fu f = new Zi();
Fu f 在栈中定义了一个引用,也就是指针。
new Zi() 在堆中定义了一个对象,只不过这个对象有父类的那一部分成员。
1、如果用子类引用指向这个对象,全部访问的是子类的。
2、如果用父类引用指向这个对象,全部访问的是这个对象里面父类的,只不过父类函数被覆盖,所以导致成员是父类,函数时子类的。
肯定是根据指针类型去访问要访问的东西。猫肯定要去吃猫粮,狗才去吃狗粮。
Java基础十二--多态是成员的特点的更多相关文章
- Java基础(十二)--clone()方法
Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...
- java基础(十二 )-----Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...
- Java基础(十二)之包和权限访问
软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,pac ...
- Python基础(十二) 类私有成员和保护成员
python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...
- java基础十二[集合与泛型](阅读Head First Java记录)
集合 List 知道索引顺序的集合,ArrayList.LinkedList.Vector三个子类实现了List接口 ArrayList ArrayList没有排序方法,可以用Collection ...
- “全栈2019”Java第九十二章:外部类与内部类成员覆盖详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java实习生常规技术面试题每日十题Java基础(二)
目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
随机推荐
- 安卓备份 To Do(待办事项)的数据库
真正路径:/data/data/com.mediatek.todos/databases/todos.db 使用过链接的路径:/data/user/0/com.mediatek.todos/datab ...
- 023-centos6.5上安装使用xtrabackup
第一步:下载.这个就看你选择什么样的安装方式了,有二进制安装,有源码包安装,有在线的rpm安装.我选择二进制安装方式,所以下载时选择linux-Generic.下载后用rz命令在xshell上上传到l ...
- python进程同步,condition例子
#coding=utf-8import multiprocessing as mpimport time def consumer(cond): with cond: print ...
- Bootstrap+AngularJS对话框实例
<script type="text/javascript" src="/assets/JS/plugins/jquery.min.js">< ...
- cisco路由器 三层交换机简单环境配置实例(图)
出处:http://www.jb51.NET/softjc/56600.html cisco路由器&三层交换机简单环境配置实例 一.网络拓扑图: 二.配置命令: 1.路由器的配置: inter ...
- 1、初始Java应用程序
Java Application程序,也称为Java应用程序,是可独立的应用程序.该类程序以main()方法作为入口,由独立的Java解释器加载执行. 下面的列子是一个简单的Java应用程序. imp ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
- 浏览器内核、排版引擎、js引擎
[定义] 浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”.负责对网页语法的解释(如标准通用标记语 言下的一个应用HT ...
- maven parent工程.pom修改后未自动更新
前两周,因为框架parent工程的pom文件做了一点变更,然后在测试服务器进行maven install的时候,死都找不到新的依赖,都把nexus翻了个遍,确定是最新的了,就是download不下来, ...
- MAC BOOK Air 安装metasploit-framework
Step 1:Xcode命令行开发工具OS X确保它已经安装了Xcode开发工具,在终端执行: xcode-select --install1Step 2:Java SDK安装Java sdk,不能用 ...