java面向对象 10 多态

    多态:

1.多态是指同名不同方法在程序中共存,即为同一个方法定义几个版本,运行时根据不同情况执行不同的

版本。调用者只要需要使用同一个方法名,系统会根据不同情况调用相应的不同方法,从而实现不同

的功能。(一个名字,多个方法)

         多态性的实现有两种方式:1. 覆盖实现多态性。

                                                     2. 重载实现多态性

  • 多态存在的条件 :1. 有继承关系

                                        2. 子类重写父类的方法

                                        3. 父类引用指向子类对象

  • 覆盖:1. 通过子类对继承父类方法的定义来实现。

    注意:在子类重定义父类方法时,要求父类原型 (参数个数,类型,顺序) 完全相同。

  • 重写方法调用规则:根据调用该方法的实例的类型来决定选择哪个方法调用。对于类的一个

                                           实例,如果子类重写父类的方法,则运行时 系统调用子类的方法。如果子类

                                           继承了父类的方法(未重写),则运行时系统调用父类的方法。一个父类对象可以

                                           通过引用子类的实例化来调用子类子类的方法。

 class Perosn
{
   public void run()
  {
       System.out.println("run");
  }
}
/*
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系 类型转换异常!classCastException!
3.存在的条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1=new Son();
   1.static 方法,属于类,它不属于实例
   2.final 常量池里面:
   3.private方法:这些都不能重写,就更不能多态
*/
class Student extends Perosn
{
   public void run()
  {
       System.out.println("son");
  }
   public void eat ()
  {
       System.out.println("ear");
  }
}
public class  A        //Application
{
   public static void main(String[] args)
  {
       //一个对象的实际类型是确定的
       //new Student();
       // new Perosn();
       //可以指向的引用类型就不确定了,父类的引用指向子类
       //Student 能调用的方法都是自己的或者继承父类的!
       Student s1= new Student();
       //Perosn 父类型,可以指向子类,但是不能调用子类独有的方法
       Perosn s2=new Student();
       Object s3=new Student();
       //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
       //子类如果没有重写父类的方法,就调用父类的,如果子类重写了父类的方法就调用子类的
       s2.run();//子类重写了父类的方法,执行了子类的方法
       s1.run();
       s1.eat();
       /*
         son
         son
         ear
        */
  }
}

动态编译:类型:可扩展性变强

  • 及同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多。

  • 注意:多态是方法的多态,属性没有多态性。

  • instanceof (类型转换)引用类型 

 

  • 总结:

                      实例化父类:父类调用父类的方法

                      实例化子类:1. 如果方法重写,子类调用子类的方法。

                                            2.如果方法未重写,子类对象调用父类方法。

               父类实例化子类:1. 如果方法重写,父类调用子类。

                                            2. 如果方法未重写,父类调用父类

                                            3. 父类型,可以指向子类,但是不能调用子类独有的方法

            方法重写两个原则:1. 改写后的方法不能比被重写的方法有更严格的访问权限。

                                             2. 改写后的方法不能比重写的方法产生更多 的异常。

                                 重载:1. 类中多个同名的方法来实现的。

                                            2. 由于重载发生在一个类里(覆盖发生在不同类中),不能用类名来区分不同的方法,

                                                所以采用不同的形式参数列表,包括形式参数的个数,类型,顺序的不同,俩区分

                                                重载的方法。

 

posted @   zjw_rp  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示