第八节 多态和Object类
多态的定义:某一类事物的多种存在形态
例子:学生类:包含学生A和学生B
学生A对象对应的类型是学生A类型:StudentA studentA = new StudentA;
Student student = new StudentA();学生Student是学生A和其他学生事务中抽取出来的父类;父类的引用指向了子类对象。
多态的体现:
父类的引用指向了自己的子类对象。
Student student = new StudentA();
多态的强转:
Animal c = new Cat(); //子类转化为父类 向上转型
Cat cat1 = (Cat)c; // 向下转型 Animal 强转成Cat类型 //父类强转成子类:Animal类型c 强转成了 Cat类型c
多态的特点:
A. 在多态中成员函数的特点:
在编译时期:参阅引用性变量所属的类中是否有调用的方法。如果有,编译通过;
在运行时期:参阅对象所属的类中是否有调用的方法。
简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边。
B. 在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
C. 在多态中,静态(static)函数的特点:
无论编译和运行,都参考左边。
例如下面的代码:
1 |
class Fu{
int num=5;
void method1(){
System.out.println(" Fu Method_1");
}
void method2(){
System.out.println(" Fu Method_2");
}
static void method4(){
System.out.println(" Fu Method_4");
}
}
class Zi extends Fu{
int num=8;
void method1(){
System.out.println("Zi Method_1");
}
void method3(){
System.out.println("Zi Method_3");
}
static void method4(){
System.out.println(" Zi Method_4");
}
}
public class DuoTaiDemo_1 {
public static void main(String[] args){
Fu f=new Zi();
f.method1();
f.method2();
//f.method3();
System.out.println(f.num);
Zi z=new Zi();
System.out.println(z.num);
f.method4();
z.method4();
}
}
|
如果由f.method3(); 那么编译不会通过,因为在Fu类中没有这个方法。
num作为成员变量,无论编译和运行,都参考左边,也就是引用型变量所属的类,第一个是父类(Fu)中的num,第二个是子类(Zi)中的num。
Method4作为静态(static)函数,无论编译和运行,都参考左边。
最后程序的运行结果是:
- Zi Method_1
- Fu Method_2
- 5
- 8
- Fu Method_4
- Zi Method_4
Object类
它是所有对象的间接父类;该类中定义的所有对象都具备的功能。
equals()方法:
java认为所有的对象都具备比较性,都能比较大小。
示例:
class Test{
public static void main(String[] args){
Test t1 = new Test();
Test t2 = new Test();
System.out.println(t1.equals(t2));//其实equals就是用的我们==来比较的。
}
}
注意:我们在重写equals()方法的时候我们必须要先进行多态转型。
toString()方法:
class Test{
public static void main(String[] args){
Demo d = new Demo();
System.out.println(d.toString);//打印结果?
System.out.println(Integer.toHexString(d.hashCode()))
}
class Demo{
}
第八节 多态和Object类的更多相关文章
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
- 多态、Object类和 JDK常用封装类型
多态 定义:某一类事物的多种存在形态. 多态的体现:父类的引用指向了自己的子类对象.父类的引用也可以接收自己的子类对象. 多态的前提:必须是类与类之间有关系,要么继承,要么实现.通常还有一个前提,存在 ...
- 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类
5.8多态 上面我们了解了向上转型,即一个对象变量可以引用本类及子类的对象实例,这种现象称为多态(polymorphism).多态究竟有什么用呢?我们先学习一个知识点. 5.8.1方法重写 前面我们学 ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- 第10章 接口、继承与多态----Object类
在Java中,所有的类都直接或间接继承了java.lang.Object类.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类.当创建一个类时,总是在继承,除非某个类已经指定要 ...
- 四. Java继承和多态10. Java Object类
Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...
- 基础学习day08---多态、简单工厂、Object类equals和toString
一.多态 1.1.多态概念 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型:猫 x = new 猫(); 同时猫也是动物中的一种,也可以 ...
- 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍
面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...
- 黑马程序员——JAVA基础之多态与Object
------- android培训.java培训.期待与您交流! ---------- 多态 : 多态定义: 某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象. ...
随机推荐
- GDscript风格指南
(惯例感谢godot开发组~~·) 缩进 缩进类型:Tabs (编辑器默认) 缩进大小:4 (编辑器默认) 每个缩进级别必须大于包含它的代码块. 良好的: for i in range(10): pr ...
- centos7安装zabbix3.0超详细步骤解析
centos7安装zabbix3.0超详细步骤解析 很详细,感谢作者 以下是我操作的history 622 java -version 623 javac -version 624 grep SELI ...
- SpringMvc @PathVariable 工作原理
SpringMvc @PathVariable 工作原理: 友情提示:查看清晰大图,请鼠标右击图片后,选择新标签页中打开. 相关对象: DispatcherServlet DefaultAnnot ...
- Oarcle 入门之 order by 关键字
order by 关键字 作用:用于对查询结果进行排序 select * from emp where deptno = 20 order by sal asc /desc; 如何排序之升降问题 *用 ...
- liteos 从入门到放弃
这两天收到一份sdk,hisi 3516cv200 liteos的sdk 正好手头有硬件,就随便编译玩玩. 解压sdk. Hi3518E_SDK_V5.0.5.0 ll@ubuntu:~/work20 ...
- ubuntu kylin18 安装NVIDIA驱动
这几天装系统快被折腾死了,事情的起因是这样的. 这件事情发生之前那两天一直在调试oled屏幕.我自己做转接板,1.3寸30针fpc的接口. 由于没有使用fpc专用转接座子,导致焊接特别困难,索性最后牺 ...
- 【题解】Luogu P3931 SAC E#1 - 一道难题 Tree
原题传送门 题目几乎告诉你要用最大流 先进行搜索,将树的叶子节点都连到一个虚拟点T上,流量为inf(这样不会干扰到前面部分的最大流) 其他边按树的形态连边,以根节点为S,跑一变最大流即可求出答案 #i ...
- 【python游戏编程04--加载位图与常用的数学函数】
一.pygame中常用的数学函数 首先介绍两个角度和弧度转换的函数 math.degress()和math.radians()用法很简单,只要将数值传进去然后接受返回值就可以 math.cos(ang ...
- 王之泰201771010131《面向对象程序设计(java)》第八周学习总结
第一部分:理论知识学习部分 第六章 第六章知识点主要分为1. 接口 2. lambda表达式 3. 内部类 4. 代理 1. 接口 1) Java为了克服单继承的缺点,Java使用了接口, 一个类可以 ...
- tp未验证内容-9
在tp的数据库配置中, convention.php中所有的选项都没有设置,要自己在Home/conf/config.php中自己设置, 注意几个地方,一是数据库的名字是: db_name,不是db_ ...