对象类型的转换

  Dog dog = new Dog();

  通常情况下,对象(new Dog())类型和引用(dog)类型是相同的,当引用类型和对象类型不一致时,就需要类型转换。

  向上转型:将较具体的类转换为较抽象的类。(子类对象-> 父类对象)即把子类对象赋值给父类类型的变量。安全

    这样可以做到在父类中定义一个方法完成各个子类的功能,使同一份代码无差别运用到不同类型之上。这是多态机制的基本思想。

  向下转型:将较抽象的类转换为较具体的类。(父类对象 -> 子类对象)但是如果将父类对象直接赋予子类,会出现编译器错误。所以必须使用显示类型转换,向编译器指明将父类对象转换为哪一种类型的子类对象。 不安全

  使用操作符instanceof判断父类对象是否为子类对象的实例,返回值为boolean类型。

方法重载

  方法重载是为了让方法名相同而形参不同的构造方法同时存在

  不定长参数方法: 返回值 方法名(参数数据类型 ... 参数名称)

    int add(int ... a) 这个不定长参数a是一个数组,编译器将int...a看成int[]a。

多态

  多态可以使程序具有良好的扩展性,并对所有类对象进行通用的处理

  Java中多态性表现:

    方法的重载和重写

    可以用父类的引用指向子类的具体实现,而且可以随时更换为其它子类的具体实现。

//创建一个Animal类1 public class Animal {
         String name;
         public void say() {
              System.out.println("I am an animal.");
       }
 }
建立一个Dog类继承Animal类,并重写say()方法

1 public class Dog extends Animal {
        public void say() {
            System.out.println("I am a dog.");
    }
        public void yell() {
            System.out.println("Bowl,Bowl,Bowl.")
    }
 }
建立Cat类继承Animal类,重写say()方法

1  public class Cat extends Animal {
          public void say() {
              System.out.println("I am a Cat .");
       }
          public void yell() {
              System.out.println("Meow, Meow, Meow.")
       }
 }
public class Text {
       public static void main(String[] args) {
            Dog dog = new Dog();
            dog.say();
            dog.yell();
            Cat cat = new Cat();
            cat.say();
            cat.yell();
       }
}

输出:I am a dog.Bowl, Bowl, Bowl.I am a cat.Meow, Meow, Meow
 public class Text2 {
     public static void main(String[] args) {
         Animal dog = new Dog(); //向上类型转换,使用父类的引用指向子类对象
         dog.say();
         dog.yell();   //报错。The method yell() is undefined for the type Animal,因为dog引用是Animal类型,使用强制类型转换修正((Dog) dog).yell();
         Animal cat = new Cat();
         cat.say();
         cat.yell();    //报错。
     }
 }
 public class Text3 {
     //创建静态方法doSomething方法(在main方法中可以直接调用),使用instanceof关键字,解决Text2中的错误
     public static void doSomething(Animal animal) {
         animal.say();
         if (animal instanceof Dog) {
             ((Dog) animal).yell();
         } else if (animal instanceof Cat) {
             ((Cat) animal).yell();
         }
     }

     public static void main(String[] args) {
         doSomething(new Dog());  //直接创建对象后调用静态方法
         doSomething(new Cat());
     }
 }
输出:I am a dog.Bowl, Bowl, Bowl.I am a cat.Meow, Meow, Meow

  

    

Day04.a(对象类型的转换,多态)的更多相关文章

  1. java 对象类型的转换

    import com.java.charpt05.NewStr; class Quadrangle{    public static void draw(Quadrangle q)    {     ...

  2. 我的Java历程_Java对象类型的转换

    向上转型: 可以将子类对象看作是父类对象叫做“向上转型”,由于向上转型是从一个较为具体的类向较为抽象的类的转换,所以它总是安全的. 例如:可以将正方形.长方形叫做是四边形,但是不能说四边形是正方形或长 ...

  3. json格式和对象类型的转换20170330

    (1)对象的类型转换成字符串类型(或者更确切的说是json类型的) JSONObject jo = JSONObject.fromObject(map);常见的java代码转换成json 比如:后台J ...

  4. 分享:根据svg节点对象类型和路径值转换坐标值

    功能用处: 对svg文件的路径节点填充时会使用(相邻两个坐标区域内的四边形的填充颜色不重复). 需要对svg文件中的Path节点或者 Polyline 节点做颜色填充.并且相邻的两个区域之间的颜色不允 ...

  5. php中对象类型与数组之间的转换

    1.刚看视频学习的时候看到一个困扰很久的问题, 有时候我们在进行做项目的时候会碰到的一个小问题.举一个小例子.  获取一个xml文件里面的数据. xml.xml文件如下: <?xml versi ...

  6. Redis对象类型

    Redis对象类型 Redis基于基础的数据结构创建的对象: 字符串对象. 列表对象. 哈希对象. 集合对象 有序集合对象. 对象回收:Redis对象系统实现了基于引用计数技术的内存回收机制,当程序不 ...

  7. 一文读懂Redis常见对象类型的底层数据结构

    Redis是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.Redis支持五种常见对象类型:字符串(String).哈希(Hash).列表(List).集合(Set)以及有序集合( ...

  8. C#高级编程笔记 2016年10月8日运算符和类型强制转换

    1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...

  9. JS 之Blob 对象类型

    原文 http://blog.csdn.net/oscar999/article/details/36373183 什么是Blob? Blob 是什么? 这里说的是一种Javascript的对象类型. ...

随机推荐

  1. 起步wex5 谷歌浏览器兼容性问题,CheckBox不显示

  2. a标签 download base64 下载 网络失败

    使用html2canvas 生成尺寸较大 base64 后进行 a标签  download 下载 ,浏览器报网络失败错误 通过谷歌搜索 发现原因是 因为截取尺寸较大  导致生成base64 长度太大 ...

  3. django下的xadmin相关设置

    后台设置中文在 settings.py LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = ...

  4. P1744 采购特价商品

    原题链接 https://www.luogu.org/problemnew/show/P1744 一道最短路的模板题.....很简单吧 求最短路的方法有很多,但是对于刚学完Floyd的我,只会用这个. ...

  5. ADC采样工作原理详解

    如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?这个问题,是第一次接触ADC时候,大家都会遇到的问题.会读到什么值单片机会读到什么值?需要看一个特性,就是几位的AD ...

  6. 简易RPC

    暴露服务: package com.saiarea; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; impo ...

  7. opencv debug版本在linux下编译,并写了一个DEMO

    用如下方法编译opencv: git clone "https://github.com/opencv/opencv.git" mkdir opencv_debug cd open ...

  8. Css(常用的特殊效果)

    一.前言 不得不说css真强大,总结了几个常用的css特殊效果 二.主要内容 1.几个特殊效果 $green = #02a774; $yellow = #F5A100; $bc = #e4e4e4; ...

  9. 【asp.net】asp.net实现上传Excel文件并读取数据

    #前台代码:使用服务端控件实现上传 <form id="form1" runat="server"> <div> <asp:Fil ...

  10. 使用numpy的小惊喜

    今天使用 numpy.true_divide 发现个有趣的事情, 下面的代码18.19行如果去掉,就会报下面的  RuntimeWarning def multivalue_divide(timese ...