多态的定义:某一类事物的多种存在形态

例子:学生类:包含学生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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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)函数,无论编译和运行,都参考左边。

最后程序的运行结果是:

  1. Zi Method_1
  2. Fu Method_2
  3. 5
  4. 8
  1. Fu Method_4
  2. 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类的更多相关文章

  1. Java 面向对象概述原理: 多态、Object类,转型(8)

    Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...

  2. 多态、Object类和 JDK常用封装类型

    多态 定义:某一类事物的多种存在形态. 多态的体现:父类的引用指向了自己的子类对象.父类的引用也可以接收自己的子类对象. 多态的前提:必须是类与类之间有关系,要么继承,要么实现.通常还有一个前提,存在 ...

  3. 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类

    5.8多态 上面我们了解了向上转型,即一个对象变量可以引用本类及子类的对象实例,这种现象称为多态(polymorphism).多态究竟有什么用呢?我们先学习一个知识点. 5.8.1方法重写 前面我们学 ...

  4. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  5. 第10章 接口、继承与多态----Object类

    在Java中,所有的类都直接或间接继承了java.lang.Object类.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类.当创建一个类时,总是在继承,除非某个类已经指定要 ...

  6. 四. Java继承和多态10. Java Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  7. 基础学习day08---多态、简单工厂、Object类equals和toString

    一.多态 1.1.多态概念  定义:某一类事物的多种存在形态.        例:动物中猫,狗.    猫这个对象对应的类型是猫类型:猫 x = new 猫();    同时猫也是动物中的一种,也可以 ...

  8. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  9. 黑马程序员——JAVA基础之多态与Object

    ------- android培训.java培训.期待与您交流! ----------  多态 : 多态定义:  某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象.       ...

随机推荐

  1. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  2. 一个简单好用的日志框架NLog

    之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...

  3. List 循环删除 指定元素的 方法

    使用Iterator进行循环,在删除指定元素.如果使用for 或 foreach 在删除指定下标是,list.size 会相应的缩短且下标前移,导致相邻满足条件的元素未删除 Iterator<S ...

  4. wait(), notify(), notifyAll()等方法介绍

    在Object.java中,定义了wait(), notify()和notifyAll()等接口.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁.而not ...

  5. rabbitmq安装与高可用集群配置

    rabbitmq版本:3.6.12 rabbitmq安装 1.安装openssl wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz &a ...

  6. ES5的完美继承

    // 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = functio ...

  7. kindeditor4.1.11的使用方法

    在引入某个外部框架/功能件的 时候, 通常是 先引入css, 后引入js. css的必要属性是rel和href, js的必要属性是charset和src. js都是用javascript的,所以 cs ...

  8. Hbasewindows系统下启动报错及解决办法

    今天在本地windows电脑上,装pinpoint时,需要先安装一个Hbase数据库,按照教程下载启动Hbase数据库时,却启动报错:java.io.IOException: Could not lo ...

  9. python tar 打包

    import os import tarfile def make_targz_one_by_one(output_filename, source_dir): tar = tarfile.open( ...

  10. pagex/y offsetx/y screenx/y clientx/y 用法及区别

    1  pagex/pagey:鼠标相对于整个页面的x/y坐标 注:整个页面的意思就是你整个页面的全部 例如:宽200px 高400px 那么pagex/y他们最大值就是它 2,offsetX/y与pa ...