Java基础学习:面向对象12(多态)


Java基础学习:面向对象12

  • 多态:

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

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

    • 动态编译;可扩展性更强;

       

    • 多态存在的条件:

      • 有继续关系;

      • 子类重写父类方法

      • 父类引用指向子类对象;

  • 注意:

    • 多态是方法的多态,属性没有多态;

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

 

 

  • 代码1:

    public class Application {
       public static void main(String[] args) {
    ?
           //一个对象的实际类型是确定的,
           //new Student();
           //new Person();
    ?
           //可以指向的引用类型就不确定了:父类的引用指向子类的对象//也就说,可以通过父类去new子类
    ?
           /**
            * 笔记:
            * 1,Student 能调用的方法都是自己的,或者继承父类的;
            * 2,Person 父类型,虽然可以指向子类,但是不能调用子类独有的方法;
            * 3,子类重写了父类的方法,执行的就是子类的方法;(重点)
            *
            * 4,运行时,动态绑定:
            *
            */
           Student s1=new Student();
           Person s2=new Student();
           Object s3=new Student();
    ?
           s2.run();//子类重写了父类的方法,执行子类的方法
           s1.run();
    ?
           s1.eat();
           //s2.eat();//能执行哪些方法,只要看对象左边的类型 和右边关系不大
          ( (Student)s2).eat();
    ?
      }
    }
    /*
    多态:注意事项:
       1,多态是干嘛的:多态是方法的多态;属性没有多态;
       2,父类和子类,有联系;否则就会报错:类型转换异常!ClassCastException;
    ?
       3,存在的条件:
           (3.1)继承关系;
           (3.2)方法需要被重写;
           (3.3)父类的引用指向子类的对象;
    ?
    ?
       4,哪些方法不能被重写:
           4.1:static修饰的方法:属于类,它不属于实例;
           4.2:final修饰的方法,是常量,无法改变;
           4.3:private修饰的方法;
    ?
    */
    ?

     

  • 笔记:

    • //子类重写了父类的方法,执行子类的方法