---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
在学习java中的多态,对学习内容做下笔记,好记性不如烂笔头嘛!
对象的多态性。
动物 x=new 猫();一个对象,两种形态。
简单说:就是一个对象对应着不同类型。
多态在代码中的体现:
父类或者接口的引用指向其子类的对象。比如:定义一个方法在里面传入动物对象作为参数,那么只要继承了动物类的类,直接调用方法在里面传入类,就可以调用公有的方法了。
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。比如:新添加一个猪类继承动物类,也有吃的行为,则前期定义的方法也可以用。
多态的弊端:
前期定义的内容不能使用后期子类的特有内容。比如:要在动物方法里面调用抓老鼠的方法,或新定义一个方法。则不行了,因为动物抽象类里面没有这个方法,而要定义一个的话,其他类又没有,动物类的方法必须是共性的。
多态的前提:
1.必须有关系,继承,实现。
2.要有覆盖。
下面是代码:
abstract class Animal
{
abstract void eat();
}
class Dog extends Animal
{
void eat(){
System.out.println("啃骨头");
}
void lookHome(){
System.out.println("看家");
}
}
class Cat extends Animal
{
void eat(){
System.out.println("吃鱼");
}
void catchMouse(){
System.out.println("抓老鼠");
}
}
class Pig extends Animal
{
void eat(){
System.out.println("饲料");
}
}
class DuotaiDemo
{
public static void main(String[] args)
{
//Cat a=new Cat();
//method(a);
//Dog d=new Dog();
//method(d);
//method(new Pig());
Animal a=new Cat();//自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。
//作用就是限制对特有功能的访问。
//专业讲:向上转型.
a.eat();
//a.catchMouse();不能用啦
//如果还想用具体动物猫的特有功能。
//你可以讲该对象进行向下转型。
Cat c=(Cat)a;//向下转型的目的是为了使用子类中的特有方法。
c.eat();
//Animal a=new Animal();这是一个动物对象,不能转换成猫
//Cat c=(Cat)a;
}
/*public static void method(Cat a){
a.eat();
}
public static void method(Dog d){
d.eat();
}
*/
/*
public static void method(Animal a){
a.eat();
}
*/
}