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

  • 相关阅读:
    搭建docker私有registory (harbor)
    消息队列原理及ActiveMQ、RocketMQ、RabbitMQ、Kafka区别总结
    too many users are authenticated
    docker环境部署nginx、tomcat、redis
    docekr环境部署mysql、kafaka、kafkamanager和mongodb
    在IE6 情况下让PNG图片透明的3种方法
    ecshop商品列表页出现一个空的搜索结果
    ecshop去掉国家省市区,实现手动填写收货地址
    ecshop始终显示全部分类
    ecshop商品列表页增加/显示货号SN
  • 原文地址:https://www.cnblogs.com/yesec/p/15249675.html
Copyright © 2011-2022 走看看