java 多态

Posted 墨染千城

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多态相关的知识,希望对你有一定的参考价值。

 多态的定义与使用格式

多态的定义格式:就是父类的引用变量指向子类对象

父类类型  变量名 = new 子类类型();

变量名.方法名();

 

普通类多态定义的格式

父类 变量名 = new 子类();

如: class Fu {}

    class Zi extends Fu {}

    //类的多态使用

Fu f = new Zi();

 

式抽象类多态定义的格

抽象类 变量名 = new 抽象类子类();

如: abstract class Fu {

         public abstract void method();

         }

class Zi extends Fu {

public void method(){

              System.out.println(“重写父类抽象方法”);

}

}

//类的多态使用

Fu fu= new Zi();

 

接口多态定义的格式

接口 变量名 = new 接口实现类();

如: interface Fu {

             public abstract void method();

}

class Zi implements Fu {

             public void method(){

              System.out.println(“重写接口抽象方法”);

}

}

//接口的多态使用

Fu fu = new Zi();

 

 

注意事项

同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。

如 Person p1 = new Student();

   Person p2 = new Teacher();

   p1.work(); //p1会调用Student类中重写的work方法

   p2.work(); //p2会调用Teacher类中重写的work方法

当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。

 

public class Person {
    public void eat() {
        System.out.println("人吃饭");
    }
}

 

public class Student extends Person{
    public void eat() {
        System.out.println("学生吃饭");
    }
}

 

public abstract class Animal {
    public abstract void sleep() ;
}

 

public class Cat extends Animal{
    public void sleep() {
        System.out.println("猫趴着睡觉");
    }
}

 

public interface Drinking {
    public abstract void drink();
}

 

public class Pig implements Drinking{
    public void drink() {
        System.out.println("小猪喝酒");
    }
}

 

 

public class Demo01 {
    public static void main(String[] args) {
        //1.多态:子类对象指向父类引用变量(普通类之间的多态)
        Person p=new Student();
        p.eat();
        //2.抽象类与普通类的多态(抽象类可利用多态创建普通对象)
        Animal a=new Cat();
        a.sleep();
        //3.接口与普通类之间的多态(子类必须是普通类)
        Drinking d=new Pig();
        d.drink();
    }
}

以上是关于java 多态的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

多态性和动态铸造

Java多态——代码复用性

Java 多态

java多态/重载方法——一个疑难代码引发的讨论

Java 多态