多态是java面向对象的三大特性之一
多态就是同一事件放在不同的对象上有不同的效果
方法的重写和重载就可以叫做方法的多态
class Dog {
public void eat() {
System.out.println("吃骨头");
}
public void eat(String name) {
System.out.println(name + "吃骨头");
}
}
class Pup { // 小狗
public void eat() {
System.out.println("吃狗粮");
}
}
public class Demo1 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
Pup pup = new Pup();
pup.eat();
}
}
对象的多态:
必须要有继承关系,子类重写父类的方法,而父类可以调用子类重写后的方法(不能调用子类独有的方法),简单来说就是 父类的引用指向子类的对象。
class Dog {
public void eat() {
System.out.println("吃骨头");
}
public void eat(String name) {
System.out.println(name + "吃骨头");
}
}
class Pup extends Dog { // 小狗
@Override
public void eat() {
System.out.println("吃狗粮");
}
@Override
public void eat(String name) {
System.out.println(name + "吃狗粮");
}
}
public class Demo1 {
public static void main(String[] args) {
Dog dog = new Pup();
dog.eat();
dog.eat("小狗");
}
}
还有一种对象的多态的体现形式:
父类 父类的引用 = new 子类();
子类 子类的引用 = (子类) 父类的引用;
class Master {
public void feeding(Animal animal) {
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.eat();
}
}
public void feeding1(Animal animal) {
if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.eat();
}
}
}
class Animal {
public void eat() {
System.out.println("吃饭");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
public class Test {
public static void main(String[] args) {
Master master = new Master();
Animal animal = new Dog();
Animal animal1 = new Cat();
master.feeding(animal);
master.feeding1(animal1);
}
}