[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();
    }
}

posted @ 2021-09-10 02:25  Ye'sBlog  阅读(94)  评论(0编辑  收藏  举报