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 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
随机推荐
- Spring整合ActiveMQ:spring+JMS+ActiveMQ+Tomcat
一.目录结构 相关jar包 二.关键配置activmq.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- Python zip() 处理多于两个序列的参数, 存储结对的值
zip() 可以接受多于两个的序列的参数.这时候所生成的结果元组中元素个数跟输入序列个数一样 >>> a = [1, 2, 3] >>> b = [10, 11, ...
- mysql B+Tree索引
原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 数据结构及算法基础 索引的本质 MySQL官方对索引的定义为:索 ...
- 彻底明白Flink系统学习5:window、Linux本地安装Flink
http://www.aboutyun.com/thread-26393-1-1.html 问题导读 1.如何在window下安装Flink? 2.Flink本地安装启动命令与原先版本有什么区别? 3 ...
- 20145316许心远《网络对抗》Exp6信息搜集与漏洞扫描
20145316许心远<网络对抗>Exp6信息搜集与漏洞扫描 实验后回答问题 哪些组织负责DNS.IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.D ...
- SpringBoot之集成Socket
1.Socket是什么,这里不做介绍.开发环境:jdk1.8,win7_64旗舰版,idea 2.初始化一个springboot项目 3.开始Socket服务端实现,Socket相关接口在 ...
- https的设置
现有如下的web架构(简化之后的),需要把原来的http访问修改到https访问! haproxy的认证有两种方式: 第一种:haproxy提供ssl证书,后面的nginx访问使用正常的http. 第 ...
- Python入门之面向对象的多态
本章目录: 一.多态 二.多态性 三.鸭子类型 ============================== 一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import ab ...
- bzoj1660 / P2866 [USACO06NOV]糟糕的一天Bad Hair Day
P2866 [USACO06NOV]糟糕的一天Bad Hair Day 奶牛题里好多单调栈..... 维护一个单调递减栈,存每只牛的高度和位置,顺便统计一下答案. #include<iostre ...
- 使用CSP防止XSS攻击
转载自阮一峰博客:http://www.ruanyifeng.com/blog/2016/09/csp.html 跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞. 为了防止它们,要采取很多编程 ...