对象类型的转换

  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. spring 方法验证参数

    1:实体使用 @Valid    使用 validation  类注解 2:String 使用 controller 添加 @Validated @NotBlank(message = "i ...

  2. 【python 字符串】 字符串的相关方法(三)

    # 将字符串中的每个元素,按照指定分隔符进行拼接 # 空格 .# ._ 等等 不能是反斜杠 test = '你是风儿我是沙' ret = '#'.join(test) print(ret) 你#是#风 ...

  3. 什么是GPIO?

    ”通用输入/输出口”(GPIO)是一个灵活的由软件控制的数字信号.他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟 悉.每个GPIO都代表一个连接到特定引脚或球栅阵列(B ...

  4. Java基础 -- Collection和Iterator接口的实现

    Collection是描述所有序列容器(集合)共性的根接口,它可能被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口.另外,java.util.AbstractCollection ...

  5. 服务器配置 ssl 证书

    最近因为公司的 服务器 ssl证书即将到期(服务器 和 ssl证书管理都在 腾讯云上), 所以为了能顺利的 重新申请 ssl证书 ,我和小伙伴 在他的个人服务器上尝试了一波(我们居然都不会 ...) ...

  6. [Luogu P2296][NOIP 2014]寻找道路

    emmm交了第8次才过. 这道题目测一道单源最短路问题,因此dijkstra或者spfa板子先准备好.因为题中对最短路有限定: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件1的情 ...

  7. vmware彻底隐藏控制栏白条

    vmware全屏模式都会在屏幕顶端留一条细细的条. 选择查看,里面有个独占模式.选中该模式,就可以达到完全全屏的效果. 但是进入独占模式后,无法再在多个系统间来回切换,使用ctrl+alt可以切换回正 ...

  8. java项目发布到linux服务器,tomcat正常启动但没加载项目

    问题描述: java项目发布到linux服务器,一切操作正确,linux命令启动tomcat后,查看日志启动tomcat正常,上传的war包已经解压成功,但是tomcat没加载项目. 解决方法: 1. ...

  9. [NLP] 酒店名归类

    目标: 我们内部系统里记录的酒店名字是由很多人输入的,每个人输入的可能不完全一样,比如,‘成都凯宾斯基大酒店’, ‘凯宾斯基酒店’, ‘凯宾斯基’, 我们的初步想法是能不能把大量的记录归类,把很多相似 ...

  10. hdu5974 A Simple Math Problem(数学)

    题目链接 大意:给你两个数X,YX,YX,Y,让你找两个数a,ba,ba,b,满足a+b=X,lcm(a,b)=Ya+b=X,lcm(a,b)=Ya+b=X,lcm(a,b)=Y. 思路:枚举gcd( ...