JAVA面向对象学习——java面向对象概念———多态——多态:指子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。

                                        Java 多态

 

多态是同一个行为具有多个不同表现形式或形态的能力。

 

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

 

多态性是对象多种表现形式的体现。

 

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

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

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

 

多态的优点

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

 

 

 

多态的实现方式

 

 

 

方式一:重写:

这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)

 

 

方式二:接口

  • 1. 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。

  • 2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。

 

 

方式三:抽象类和抽象方法

 

 

=========================================================

 

 

简单理解:重写、重载是多态的表现形式(实现形式)。

 

 

 

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();            ----------  参考继承中的示例

 

 

 

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

 

 

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

 

=========================================================

 

 

 

class BaseClass
{
    public int book = 6;

    public void base()
    {
        System.out.println("fu---pu");
    }

    public void test()
    {
        System.out.println("fu--------fugai");
    }
}
public class SubClass extends BaseClass
{

    public String book = "轻量级Java EE企业应用实战";

    public void test()
    {
        System.out.println("zi--------fugai");
    }

    public void sub()
    {
        System.out.println("zi------------pu");
    }

    public static void main(String[] args)
    {

        BaseClass bc = new BaseClass();

        System.out.println(bc.book);

        bc.base();
        bc.test();


        System.out.println("------------------------------------------0");



        SubClass sc = new SubClass();

        System.out.println(sc.book);

        sc.base();

        sc.test();



        System.out.println("------------------------------------------1");





        BaseClass ploymophicBc = new SubClass();

        System.out.println(ploymophicBc.book);

        ploymophicBc.base();

        ploymophicBc.test();


    }
}

  

 

 

 

posted @ 2022-01-23 15:46  小白龙白龙马  阅读(67)  评论(0编辑  收藏  举报