您的位置:首页 > 编程语言 > Java开发

java多态性理解

2016-10-26 15:20 197 查看

一  多态的基础是继承,重写,父类的引用指向子类对象,接口是多态最常见的实现方式。

概念性的东西,先说这么多,以上的都是重点,  继承 ,重写 ,父类的引用指向子类对象。

下面贴上代码  ,一步步来看到底什么是多态。

父类  动物类,然后会有Dog和Cat类继承此类

public class DongWu {

public void eat(){
System.out.println("动物会吃东西");
}

public void age(){
System.out.println("动物的年龄");
}

}

 Dog类

public class Dog extends DongWu {
//重写父类的eat()方法
public void eat(){
System.out.println("狗吃骨头");
}
//重写父类的age()方法
public void age(){
System.out.println("10岁的狗狗");
}
}

  Cat类

public class Cat extends DongWu {
//重写父类的eat()方法
public void eat(){
System.out.println("猫吃鱼");
}
//重写父类的age()方法
public void age(){
System.out.println("5岁的猫咪");
}
}

 如果平时,我们调用cat和dog累中的两个方法,需要这样写。

 为每一个类指定一个对应的方法,这样的工作太繁琐了,我们可以改变一下写法

public class Test {
public static void main(String[] args) {
//new出两个类的实例对象
Cat c=new Cat();
Dog d=new Dog();
//new出本类对象test 没有使用static
Test test=new Test();
test.test(c);
test.test(d);
}
public  void test(Dog d){
d.age();
d.eat();
}
public  void test(Cat c){
c.age();
c.eat();
}

}

  将 原来的  test方法中的参数类型改成了父类的类型,最后的结果是一样的。

  编译类型是DongWu,运行时的实际类型变成了  具体的类型 比如例子中的 d,d,dw

  这样就不用为每一个类型写一个方法,只需要写一个方法,灵活方便,程序运行时根据传入的具体参数类型去执行相对应的方法

  对于  

DongWu dw=new Cat();这种方式new出的实例对象,只能调用父类中定义过的方法,子类中新增加的方法是无法调用的。
public class Test {
public static void main(String[] args) {
//new出两个类的实例对象
Cat c=new Cat();
Dog d=new Dog();
//父类也就是DongWu的 引用 指向了子类的实例对象 (new Cat())
DongWu dw=new Cat();
//new出本类对象test 没有使用static
Test test=new Test();
test.test(c);
test.test(d);
test.test(dw);
}
//将参数类型定义为父类的类型
public  void test(DongWu dw){
dw.age();
dw.eat();
}

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: