java之多态
什么是多态
- 多态是一种操作现象,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
为什么要用多态
-
可以解决紧耦合的问题。相对来说代码比较独立。
-
应用程序不必为每一个派生类编写功能调用,只需要对抽象基类方法进行复写即可。大大提高程序的可复用性。
-
可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。(真正好处)。
//父类:动物类 class Animal{ public void eat(){ System.out.println("eat"); } public void sleep(){ System.out.println("sleep"); } } //猫类 class Cat extends Animal{ //方法重写 public void eat(){ System.out.println("狗吃肉"); } //方法重写 public void sleep(){ System.out.println("狗坐着睡"); } } //狗类 class Dog extends Animal{ public void eat(){ System.out.println("猫吃鱼"); } public void sleep(){ System.out.println("猫趴着睡"); } } //添加猪类 class Pig extends Animal{ public void eat(){ System.out.println("猪吃白菜"); } public void sleep(){ System.out.println("猪躺着睡"); } } //针对动物操作的工具类 class AnimalTool{ private AnimalTool(){} public static void feedAnimal(Animal a){ a.eat(); a.sleep(); } } /*测试类 测试类里面不放其他东西(如,定义其他方法)!只能是建对象,调方法。 所以新定义了个操作动物的工具类去放feedCat(),feedDog()方法。 */ class DuotaiTest2{ public static void main(String[] args){ //我喜欢猫,我养3只猫 Cat c= new Cat(); Cat c2= new Cat(); Cat c3= new Cat(); AnimalTool.feedAnimal(c); AnimalTool.feedAnimal(c2); AnimalTool.feedAnimal(c3); System.out.println("---------------"); //我喜欢狗,我养3只狗 Dog d= new Dog(); Dog d2= new Dog(); Dog d3= new Dog(); AnimalTool.feedAnimal(d); AnimalTool.feedAnimal(d2); AnimalTool.feedAnimal(d3); System.out.println("---------------"); Pig p= new Pig(); AnimalTool.feedAnimal(p); } }
分析
封装可以隐藏细节,提高复用性体现在相互调用上,继承扩展已存在代码,提高代码复上
private void tell(){
.....
}
public void persontell(){
tell()
......
}
编译和运行细节
Fu f= new Zi();
- 成员变量:编译看左边,运行看右边
- 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
- 成员方法:编译看左边,运行看右边。(方法重写的意义)
- 静态方法:编译看左边,运行看左边。静态重写算不上重写。