父类 Animal
package com.example.demo;
public class Animal {
private String name;
private Integer age;
public Animal(String name, Integer age) {
this.name = name;
this.age = age;
}
public Animal() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void eat() {
System.out.println ("动物吃饭");
}
public void sleep() {
System.out.println ("动物睡觉");
}
}
子类 Cat
public class Cat extends Animal {
/**
* 子类 特有方法
*/
public void catchMouse() {
System.out.println ("抓老鼠");
}
/**
* 子类 可以重写父类的方法
*/
@Override
public void eat() {
System.out.println ("猫吃饭");
}
}
子类 Dog
public class Dog extends Animal {
/**
* 子类 特有方法
*/
public void watchDoor() {
System.out.println ("狗看门");
}
/**
* 子类可以重写父类的方法
*/
@Override
public void eat() {
System.out.println ("狗吃饭");
}
}
测试:
public static void main(String[] args) {
// 多态的应用,父类引用 指向子类对象
Animal dog = new Dog ();
if (dog instanceof Dog)
System.out.println ("这个是狗");
// 只能调用这两个方法,因为类型是 Animal
dog.sleep ();
dog.eat (); // 子类重写了 eat方法,运行时走子类的方法
// 向下转型,因为dog是Dog类,所以可以直接转型
Dog dog1 = (Dog) dog;
dog1.eat ();
dog1.sleep ();
// 此时可以调用 watchDoor方法
// watchDoor方法属于Dog类
dog1.watchDoor ();
}