java 四大特征(3)

来源:互联网 发布:中世纪骑兵知乎 编辑:程序博客网 时间:2024/06/14 13:54

特征四----多态

      方法重载(overload)

问题提出:编写一个类,可以接受两个证书,返回两个数种较大的数?

           如果要求可以接受两个float型的书,返回较大数

           如果要求接受三个int型的数,返回最大数

package com.panhui;

 

publicclassdemo9_20_1 {

 

    publicstatic void main(String[]args) {

        // TODO Auto-generated method stub

      

        ABCa=newABC();

        System.out.println(ABC.getMax(2,3));

    }

 

}

 

 

class ABC

{

   //返回较大的整数

    //注意:方法要设置成静态的,这样才能被共用。

    publicstatic int getMax(inti,intj)

    {

        if(i >j)

        {

            returni;

        }

        else

        {

            returnj;

        }

    }

   

    //返回浮点型

    publicstatic  float getMax(floata,floatb)

    {

       

        if(a>b)

        {

            returna;

        }

        else

        {

            returnb;

        }

    }

}

结果

 

如果调用的时候写成getMax(12,4.5f);那么调用的方法是下面一个。因为会自动有低精度想高精度转。

 

概念

就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。

注意事项

1, 方法名是相同的

2, 方法的参数类型,个数,顺序至少有一项是不同的。

如果一个方法:publicstatic float getMax(float a,float b)

另一个方法:publicstatic float getMax(float c,float d)

那么编译器会报错,不复回上面的要求。

 

3, 方法返回类型可以不同

如果只是返回的类型不一样,是不可以构成重载

 

4, 方法的修饰符可以不同

如果只是控制访问符不一样的话,也是不可以构成重载。

 

 

 方法覆盖(overwrite)

既然子类可以继承父类的属性和方法,这样可以提高的代码的复用性。

那么,如果有三个类,猫,狗,猪,父类是动物,然后继承

问题:怎么解决子类和父类方法的异同。

理解:方法覆盖就是,子类重新写一个方法,不用父类的方法,类名可以和父类的方法相同,(细节不深究)。

如下代码:

 

package com.panhui;

 

publicclassdemo9_20_2 {

 

    publicstatic void main(String[]args) {

        // TODO Auto-generated method stub

        

        //创建一只猫

        Catcat1=newCat();

        cat1.cry();

       

        //创建一只狗

        Dogdog1=newDog();

        dog1.cry();

    }

 

}

 

//动物类

class Animal

{

   intage;

   String name;

   

   //都会叫,

   publicvoidcry()

   {

    System.out.println("我是动物,不知道怎么叫唤!");

   }

}

 

 

// 猫类

class Cat

{

   //覆盖父类

    publicvoid cry()

    {

        System.out.println("猫猫叫");

    }

}

 

//狗类

class Dog

{

    publicvoid cry()

    {

        System.out.println("狗狗叫");

    }

}

 

结果:

 

 

 

注意事项:

1, 子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错

2, 子类方法不能缩小父类方法的访问权限

 

正题:多态

理解:指向通过指向父类的指针,来调用在不同子类中实现的方法。


主人喂食,调用不同类中的方法体现出,喂的哪个动物,喂的是什么食物。

package com.panhui;

 

publicclassdemo9_20_3 {

 

    publicstatic void main(String[]args) {

        // TODO Auto-generated method stub

       /*

        Catcat = new Cat();

        cat.cry();

        Dogdog = new Dog();

        dog.cry();

       

        //多态的体现。取决于等号的右边。

        Animalan = new Cat();

        an.cry();

        an= new Dog();

        an.cry();*/

       

        Mastermaster=newMaster();

        master.feed(new Dog(),new Bone());

        master.feed(new Cat(),newFish());

    }

 

}

 

class Master

{

   //给动物喂食,使用多态,方法就可以用一个就行了

    publicvoid feed(Animal an,Food f)

    {

        an.eat();

        f.showname();

       

    }

}

 

class Food

{

    Stringname;

    publicvoid showname()

    {

       

    }

}

 

classFish extends Food

{

    publicvoid showname()

    {

            System.out.println("");

       

    }  

}

 

class  Boneextends Food

{

    publicvoid showname()

    {

            System.out.println("骨头");

       

    }

}

 

 

//动物类Animal

class Animal

{

    privateint age;

    private Stringname;

   

   publicString getName() {

        returnname;

    }

   

    publicvoid eat() {

        // TODO Auto-generated method stub

       

    }

 

    publicvoid setName(String name) {

        this.name =name;

    }

   

    publicint getAge()

    {

        returnage;

    }

   

    publicvoid setAge(intage) {

        this.age =age;

    }

   

   //动物会叫

    publicvoid cry()

    {

        System.out.print("不知道怎么叫!");

    }

   

}

 

 

//

class CatextendsAnimal

{

   //猫自己叫

    publicvoid cry()

    {

        System.out.print("猫猫叫!");

    }

   

    publicvoid eat()

    {

        System.out.print("猫吃鱼!");

    }

}

 

class DogextendsAnimal

{

   //猫自己叫

    publicvoid cry()

    {

        System.out.print("狗狗叫!");

    }

   

    publicvoid eat()

    {

        System.out.print("狗吃骨头!");

    }

}

结果


多态的注意事项

java 允许父类的引用变量引用它的子类的实例

Animal animal =new Cat();

 

0 0
原创粉丝点击