多态的概念:
多态是指同一操作作用于不同的对象上,能产生不同的解释和不同的执行方式,通俗来讲就是用一种类型的变量来引用不同的对象,从而调用不同的方法,产生不同的行为。多态是实现面向对象的软件技术中必不可少的一个内容。
实现多态的方式:
- 继承:子类可以重写父类的方法,实现不同的行为。
- 接口:不同的类可以实现相同的接口,但具体的实现可以不同。
- 方法重载:同一个类中可以有多个方法,它们具有相同的名称但参数列表不同,编译器根据参数列表的不同来选择调用哪个方法。
Java实现多态有三个必要条件:继承、重写、向上转型。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
package com.zsh.java;
public interface Animal{//接口
void eating();
}
package com.zsh.java;
public class Cat implements Animal{
//私有数据成员
private String color;
//构造方法
public Cat() {
}
public Cat(String color) {
super();
this.color = color;
}
//setter,getter方法
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//覆盖接口的方法eating
@Override
public void eating() {
System.out.println(this.color + "的猫吃老鼠");
}
public static void color(String category){
System.out.println( "小猫是" + category);
}
}
package com.zsh.java;
public class Dog implements Animal{
//私有数据成员
private String category;
//构造方法
public Dog() {
}
public Dog(String category) {
this.category = category;
}
//setter,getter方法
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
//覆盖接口的方法eating
@Override
public void eating(){
System.out.println(this.category + "吃狗粮");
}
public static void lookHome(){
System.out.println("喜欢看家");
}
}
package com.zsh.java;
public class Panda implements Animal{
//私有数据成员
private int age;
private String name;
//构造方法
public Panda() {
}
public Panda(int age, String name) {
this.age = age;
this.name = name;
}
//setter,getter方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//覆盖接口的方法eating
@Override
public void eating(){
System.out.println("今年" + this.age + "岁的熊猫"+ this.name + "爱吃竹子");
}
public static void printPanda(){
System.out.println("=================熊猫=================");
}
}
package com.zsh;
import com.zsh.java.Animal;
import com.zsh.java.Cat;
import com.zsh.java.Dog;
import com.zsh.java.Panda;
public class Test {
public static void Eating(Animal animal) {
animal.eating();
}
public static void main(String[] args) {
Animal dog = new Dog("泰迪");
Animal panda = new Panda(3,"花花");
Eating(new Cat("橘色"));
Cat.color("狸花猫");
Eating(dog);
Dog.lookHome();
panda.eating();
Panda.printPanda();
}
}
结果展示: