Polimorfismo de Java - notas de estudo de 16 dias

Polimorfismo

  • Compilação polimórfica: Tipo: Escalável
  • Ou seja, o mesmo método pode adotar uma variedade de comportamentos diferentes, dependendo do objeto de envio
  • O tipo real de um objeto é determinado, mas existem muitos tipos de referências que podem apontar para o objeto

Condições para a existência de polimorfismo

  • Herança

  • A subclasse substitui o método da classe pai

  • A referência da classe pai aponta para o objeto da classe filha

Nota: Polimorfismo é o polimorfismo do método, não há polimorfismo no atributo

  1. Polimorfismo é o polimorfismo do método, o atributo não é polimorfismo

  2. A classe pai e a classe filha são herdadas e conectadas! ClassCastExcepetion;

  3. Condições de existência: relacionamento de herança, métodos precisam ser reescritos e referências de classe pai apontam para objetos de subclasse! Pai f1 = novo filho ();

    Mas alguns métodos não podem ser substituídos

    • static é um método estático, que pertence a uma classe, não a uma instância
    • constante final
    • privado não pode
  4. (S1 foi executado, s2 foi executado e ambos foram executados. O programa só sabe a quem chamar quando está em execução)

Para nós, dependendo de qual categoria estiver à esquerda, ele será executado em qualquer lugar.Quando os dois tipos estiverem disponíveis, apenas as subcategorias serão executadas .

Inscrição

package com.oop;

import com.oop.Demo05.Person1;
import com.oop.Demo05.Stunden1;

//一个项目应该只有一个main方法
public class Application {

    public static void main(String[] args) {
        //类型之间的转换   父亲     儿子

      //高                  低     低转高 向上转型自动升型,
       Person1 p1 = new Stunden1();

       //s1将这个对象转换为Student类型,我们就可以使用Student1类型的方法
          //    低                   s1为高  高到低 向下转型 强制
           Stunden1 s1  =  (Stunden1)p1;//强制转换
           s1.go();
           p1.move(); //还是输出子类的重写方法,丢失父类的原始方法
        //((Stunden1)s1).go(); 也可以这样写之间强制加调用
        //同级的子类之间不能强制转换
       // Teacher t1 = (Stunden1)s1; 编译不通过s1已经被转换为tudent1S,


        Stunden1 s2 = new Stunden1();//可以调用本身的方法
        s2.go();;



    }
    /*
    1.父类引用指向子类的对象
    2.把子类转换为父类,向上转型,自动转型,丢失子类中原本可以之间调用的特有方法
    3.父类转换为子类要强制转换,向下转型,丢失父类被子类所重写的方法。
    4.方便方法的调用,减少重复的代码

    抽象 : 封装,继承,多态


           */
}

Pessoa 1

package com.oop.Demo05;

public class Person1 {
    
    

public void move(){
    
    
    System.out.println("移动");
}
}
/*
//Object > String
        //Object > Person1 > Teacher
        //Objiec > Person1 >Student1

        Object object = new Stunden1();

        //System.out.println(X instanceof Y);//判断是否编译通过

        System.out.println(object instanceof Stunden1);//ture
        System.out.println(object instanceof Person1);//ture
        System.out.println(object instanceof Object);//ture
        System.out.println(object instanceof Teacher);//false
        // Object > Person1 > Teacher 没有在Student1里面所有false,兄弟不能跟父子一样
        System.out.println(object instanceof String);//false
        //Object > String    String跟Person1属于同类也不知Student1里面

        Person1 person = new Stunden1();
        System.out.println("================================");

        System.out.println(person instanceof Stunden1);//ture
        System.out.println(person instanceof Person1);//ture
        System.out.println(person instanceof Object);//ture
        System.out.println(person instanceof Teacher);//false
       // System.out.println(person1 instanceof String);//编译报错

        Stunden1 stunden1 = new Stunden1();
        System.out.println("================================");

        System.out.println(stunden1 instanceof Stunden1);//ture
        System.out.println(stunden1 instanceof Person1);//ture
        System.out.println(stunden1 instanceof Object);//ture
        //System.out.println(stunden1 instanceof Teacher);//编译报错
       // System.out.println(stunden1 instanceof String);//编译报错

 */

Aluno1

package com.oop.Demo05;

public class Stunden1 extends Person1 {
    
    

    public void go(){
    
    
        System.out.println("go");
    }

    @Override
    public void move() {
    
    
        System.out.println("学生跑了起来");
    }
}

Professor

package com.oop.Demo05;

public class Teacher extends Person1 {

}

Acho que você gosta

Origin blog.csdn.net/yibai_/article/details/114903075
Recomendado
Clasificación