zoukankan      html  css  js  c++  java
  • 【Java基础】面向对象三个特征(3):多态

    一、多态的概述

      多态:一个对象拥有多种形态

        eg:小明是一个学生(学生形态),同时也是一个人(人类形态)

      多态的格式与使用:父类引用指向子类对象

        格式:父类名称 对象名 = new 子类名称()

           接口名称 接口名 = new 实现类名称()

      多态中访问成员变量、成员方法:

        成员变量:编译看左边,运行看左边

        成员方法:编译看左边,运行看右边

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

    public class Demo01test {
        public static void main(String[] args) {
    
            //格式:父类引用指向子类对象
            Animal cat = new Cat();
            System.out.println(cat.num);
    
            //访问成员方法
            cat.eat();//父子都有,优先用子
    
            cat.run();//子类没有,父类有,向上找到父类
            //无法调用子类特有的方法
            // 编译看左边,左边是父类,父类没有这个方法,所有编译报错
            //cat.catchMouse();错误写法!!!
            
        }
    }

    二、向上、向下转型

      向上转型:

        格式(与多态的写法一致): 父类名称 对象名 = new 子类名称()

        含义:右边创建一个子类对象,但把它当做父类对象来看待使用;

        注意事项:向上转型一定是安全的(子类转向父类,子类小范围转向父类大范围)

      向下转型:

        格式:子类名称 对象名 = (子类名称) 父类对象

        含义:将父类对象,转向本来的子类对象

    三、instanceof关键字

      通过此关键字,可以判断父类引用的对象本来属于哪个子类。

    public class Demo02Test {
        public static void main(String[] args) {
            Animal animal = new Dog();
            judge(animal);
        }
    
        public static void judge(Animal animal){
            if (animal instanceof Cat){
                Cat cat = (Cat) animal;
                cat.catchMouse();
            }
            if(animal instanceof Dog){
                Dog dog = (Dog) animal;
                dog.breakHome();
            }
        }
    万丈高楼平地起。
  • 相关阅读:
    代码写界面的工厂类
    Masonry的一些等间距布局
    开发中的小细节随记
    ios7 实现应用内保真截屏
    利用GCD实现单利模式的宏代码
    AVAudioPlayer的锁屏播放控制和锁屏播放信息显示
    NSXMLParser自定义的一个xml解析工具
    利用NSURLSession完成的断点续传功能
    AVFoundation下的视频分帧处理
    Redis自学笔记:4.2进阶-过期时间
  • 原文地址:https://www.cnblogs.com/jcl226/p/13326732.html
Copyright © 2011-2022 走看看