java面向对象 10 多态
多态:
版本。调用者只要需要使用同一个方法名,系统会根据不同情况调用相应的不同方法,从而实现不同
的功能。(一个名字,多个方法)
多态性的实现有两种方式:1. 覆盖实现多态性。
2.
- 
多态存在的条件 :1. 有继承关系 
2. 子类重写父类的方法
- 
覆盖: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. 由于重载发生在一个类里(覆盖发生在不同类中),不能用类名来区分不同的方法,
所以采用不同的形式参数列表,包括形式参数的个数,类型,顺序的不同,俩区分
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号