java继承之四(多态)

多态:实现动态编译,也就代码的类型只有在执行的时候才能确定,在写代码阶段确定不了,这样可以让代码的可扩展性更强。

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

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

多态的存在条件:

    有继承关系

    子类重写父类方法

    父类引用指向子类对象

注:属性没有多态

public class Main {
    public static void main(String[] args) {
       //一个对象的实际类型是确定的,如:
       //new Studed
       //new Person
       
       //但是可以指向的引用类型就不确定了  ,父类的引用指向子类
        //下面的实际类型是Studed(),这是确定的,但是他的引用类型可以指向他任意父的类
        //Studed:能调用的方法都是自己的或者继承父类的
       Studed s1=new Studed();
       //Person:父类型,可以指向子类,不能调用子类独有的方法
        Person s2=new Studed();
         Object s3=new Studed();
         //正常情况下我们要调用父类的方法要使用s2的方式去调用
         s2.run();//子类不重定父类方法时,这个s2调用的时父类的方法,但是当我们子类重写父类的方法时,他们调用的是子类的方法
          s1.run();//调用子类的run方法
          //总结:当我们父类(Person)和子类(Studed)有一样的方法时,s2调用的时子类的,当我们父类(Person)有的方法子类没有时,那s2调用的是父类的方法
          //而当子类有的方法父类没有时,s2是不能去调用的,所以对象能执行那些方法,主要看左边有那些类,和右边的对象类型关系不大
          //如:Person s2=new Studed();这个对象,我们即可以调用 父类中的方法也可调用子类中的方法,只不过当子类有重写父类方法中,s2调用的就变成了的方法了
}
    
}

//子类
class Studed extends Person{
    public void run(){//重写父类方法
        System.out.println("run()1");
    }
    public void shoe(){
        System.out.println("shoe()");
    }
    
    
}
//父类
class  Person {
    public void run(){
        System.out.println("run()");
    }
    
}

多态的注意事项:

    1.多态是方法的多态,属性没有多态。

    2.父类和子类,有联系 类型转换异常 ClassCastException!

    3.存在的条件:存在继承关系,方法要重写,父类引用指向子类对象,详解:当我们父类(Person)和子类(Studed)有一样的方法时,s2调用的时子类的,当我们父类(Person)有的方法子类没有时,那s2调用的是父类的方法,而当子类有的方法父类没有时,s2是不能去调用的,所以对象能执行那些方法,主要看左边有那些类,和右边的对象类型关系不大,如:Person s2=new Studed();这个对象,我们即可以调用 父类中的方法也可调用子类中的方法,只不过当子类有重写父类方法中,s2调用的就变成了的方法了

      3.1:不能重写的方法:static :属于类的,不属于实例

       3.2:finol :常量,不可改变的

        3.3:private方法:这三种修饰符修改的方法是不能被重写的,所以也就不能实现多态。

 


 

多态:
理解多态性:可以理解为一个事物的多种形态

 

 

 

 

何为多态性:对象的金矿性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)。


多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法------虚拟方法调用

 

 

对象的多态性只适用于方法,不适用于属性,属性是不存在多态性(编译和运行都看左边),而方法的时候是(编译看左边运行看右边)

 

 

个人理解:多态就是先创建一个父类和一个或多个子类,子类继承父类并重写父类方法,然后在测试类中创建父类的形参方法,并调用父类中的需要输出的方法,并在测试类的main方法中调用,就可以调用任意子类
注:在使用多态的时候,子类继承了父类,但没有重写父类的方法,他只能调用用父类方法:比如:你的父类定义了一htip()的方法,但子类没有重写htip()这个方法,在测试类中调用htip()方法,他只能调用用父类中的htip(),但果子类重写了htip()的方法测试类中就会调用子类重写的方法

 

 

 

 如果没有多态,上面的例子就要造很多重载的方法

posted @ 2022-04-01 10:20  hollg  阅读(54)  评论(0)    收藏  举报