zoukankan      html  css  js  c++  java
  • [JAVA学习笔记] 类与对象

    多态

    概念

    多态使对象在接受方法调用时能知道调用哪个方法实现。多态是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口,使用不同的实例而执行不同操作,如图所示:

    现实中,比如我们按下 F1 键这个动作:

    • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
    • 如果当前在 Word 下弹出的就是 Word 帮助;
    • 在 Windows 下弹出的就是 Windows 帮助和支持。

    同一个事件发生在不同的对象上会产生不同的结果。

    优点

    1. 消除类型之间的耦合关系
    2. 可替换性
    3. 可扩充性
    4. 接口性
    5. 灵活性
    6. 简化性

    必要条件

    • 继承
    • 重写
    • 父类引用指向子类对象:Parent p = new Child();

    实现方式

    • 方式一:重写
    • 方式二:接口
    • 方式三:抽象类和抽象方法

    实例

    //Demo1 - 重写
    class Fruit{
        public void eat(){
            System.out.println("Fruit Can Eat!");
        }
    }
    
    class Apple extends Fruit{
        public void red(){
            System.out.println("Apple is Red!");
        }
    }
    
    public class FruitDemo{
        public static void main(String[] args){
            Fruit aApple = new Apple();  
            aApple.eat();  //Apple类中没有eat方法,所以会调用Fruit类中的eat方法
        }
    }
    

    //Demo2 - 重写
    class Fruit{
        public void eat(){
            System.out.println("Fruit Can Eat!");
        }
    }
    
    class Apple extends Fruit{
        public void eat(){
            System.out.println("Apple Also Can Eat!");
        }
        public void red(){
            System.out.println("Apple is Red!");
        }
    }
    
    public class FruitDemo{
        public static void main(String[] args){
            Fruit aApple = new Apple();
            aApple.eat();  //Apple中存在eat方法,此时调用的是Apple类中的eat方法
        }
    }
    

    //Demo3 - 接口
    
    interface Hack {
        public void scan();
    }
    //HackingOne与HackingMore分别实现了不同的scan方法
    class HackingOne implements Hack{
        public void scan(){
            System.out.println("Started Scan Target:192.168.0.1");
        }
    }
    
    class HackingMore implements Hack{
        public void scan(){
            System.out.println("Started Scan Targets:192.168.0.0/24");
        }
    }
    
    public class Hacking{
        public static void main(String[] args){
            HackingOne test1 = new HackingOne();  //调用HackingOne的scan方法
            test1.scan();
            HackingMore test2 = new HackingMore();  //调用HackingMore的scan方法
            test2.scan();
        }
    }
    

    [ * ]博客中转载的文章均已标明出处与来源,若无意产生侵权行为深表歉意,需要删除或更改请联系博主: 2245998470[at]qq.com

  • 相关阅读:
    【转】编译原理4种文法类型
    Gamma校正与线性空间
    【翻译】CEDEC2014 CAPCOM 照相机正确的照片真实的制作工作流
    【翻译】CEDEC2013 BANDAI NAMCO 了解游戏格斗动画中的身体运动结构和原理
    UnrealEngine4 PBR Shading Model 概述
    【翻译】Kinect v2程序设计(C++-) AudioBeam篇
    【翻译】Kinect Studio是? 三月 SDK Update的新机能
    【翻译】Kinect v2程序设计(C++) Body 篇
    【翻译】Kinect v2程序设计(C++) BodyIndex篇
    【翻译】Kinect v2程序设计(C++) Depth编
  • 原文地址:https://www.cnblogs.com/yesec/p/15249675.html
Copyright © 2011-2022 走看看