多态

我知晓的应用
就只有子类继承父类,并改写父类中的方法,就是在子类中编写和父类一样名字的方法

多态性

是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。
允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方
式。
相同类域的不同对象,调用相同的方法,执行结果是不同的

多态的注意事项:

  1. 多态是方法的多态,属性没有多态性。
  2. 编写程序时,如果想调用运行时类型的方法,只能进行类型转换。不然通不过编译器的检查。但是
    如果两个没有关联的类进行强制转换,会报:ClassCastException。 比如:本来是狗,我把它转成
    猫。就会报这个异常。
  3. 多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象

多态存在的条件

  1. 有继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

以下三种类型的方法是没有办法表现出多态特性的(因为不能被重写):

  1. static方法,因为被static修饰的方法是属于类的,而不是属于实例的
  2. final方法,因为被final修饰的方法无法被子类重写
  3. private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被
    protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个
    不能被外部引用的方法,怎么能谈多态呢

详细代码

public class 多态 {
    public static void main(String[] args) {
       
        //调用到的run方法,是Student从Person继承过来的run方法
        Person p = new Student();
        p.run();//若子类和父类相同有相同名称的函数,则调用子类
        Student p1 = new Student();
        p1.run();//但因该也有某些方法让他们输出一样把
    }
    //可以指向对象的引用的类型有很多
    // 一个父类引用可以指向它的任何一个子类对象
    public static class Person{
        public void run(){
            System.out.println("我是Person中的输出");
        }
        }
    public static class Student extends Person{
        public void run(){
            System.out.println("我是Student中的输出");
        }
        }
      
}

posted @ 2021-08-04 10:46  索匣  阅读(51)  评论(0编辑  收藏  举报