动物继承案例1
package com.baidu.demo05;
/**
* 动物类
* 由于不确切是什么动物,所有定义为抽象类
*
* 比如:抽象艺术
* 抽象类不能直接实例化
*/
public abstract class Animal {
private String name;
public abstract void eat();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
具体的动物(Cat)
package com.baidu.demo05;
/**
* 具体的动物
*/
public class Cat extends Animal{//如果子类不是抽象类,必须要实现父类抽象类的方法
@Override//重写
public void eat() {
System.out.println(super.getName()+"吃鱼");
}
}
Dog
package com.baidu.demo05;
public class Dog extends Animal{
@Override
public void eat() {
System.out.println(super.getName()+"啃骨头");
}
}
测试
package com.baidu.demo05;
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.setName("猫仙");
cat.eat();
Dog dog = new Dog();
dog.setName("大狗");
dog.eat();
}
}
运行
猫仙吃鱼
大狗啃骨头
Process finished with exit code 0
接口:为了弥补类只能单一继承的缺陷,后来演变为一种接口规范
给动物都添加一个功能:跳高 Jump()
定义一个Jump接口,所有需要的这个功能的,都实现这个接口
Jump
package com.baidu.demo05;
/**
* 接口是更加抽象的抽象类
* 接口不能实例化,用于作为一种约定(规范)
*
* 接口内的方法都是抽象的方法
*/
public interface Jump {
public void jump();
}
Cat
package com.baidu.demo05;
/**
* 具体的动物
*/
public class Cat extends Animal implements Jump{//如果子类不是抽象类,必须要实现父类抽象类的方法
@Override//重写
public void eat() {
System.out.println(super.getName()+"吃鱼");
}
@Override
public void jump() {
System.out.println(super.getName()+"像狗一样跳高");
}
//子类还可以扩展方法
public void chasesdog(){
System.out.println(super.getName()+"撵狗");
}
}
Dog
package com.baidu.demo05;
public class Dog extends Animal implements Jump{
@Override
public void eat() {
System.out.println(super.getName()+"啃骨头");
}
@Override
public void jump() {
System.out.println(super.getName()+"像猫一样跳高");
}
//子类可以扩展方法
public void catchMouse(){
System.out.println(super.getName()+"捉老鼠");
}
}
测试
package com.baidu.demo05;
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.setName("猫仙");
cat.eat();
cat.jump();
cat.chasesdog();
Dog dog = new Dog();
dog.setName("大狗");
dog.eat();
dog.jump();
dog.catchMouse();
}
}
运行结果
猫仙吃鱼
猫仙像狗一样跳高
猫仙撵狗
大狗啃骨头
大狗像猫一样跳高
大狗捉老鼠
多态的案例
饲养员案例描述多态的使用:
package com.baidu.demo05;
public class Feeder {
private String name;
// public void feed(Dog dog){
// System.out.println(this.name+"喂"+dog.getName());
// dog.eat();
// }
// public void feed(Cat cat){
// System.out.println(this.name+"喂"+cat.getName());
// cat.eat();
// }
public void feed(Animal animal){
System.out.println(this.name+"喂"+animal.getName());
animal.eat();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试
package com.baidu.demo05;
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.setName("猫仙");
// cat.eat();
// cat.jump();
// cat.chasesdog();
Dog dog = new Dog();
dog.setName("大狗");
// dog.eat();
// dog.jump();
// dog.catchMouse();
//饲养员
Feeder feeder = new Feeder();
feeder.setName("小利");
//要喂的动物
feeder.feed(cat);
feeder.feed(dog);
}
}
运行结果
小利喂猫仙
猫仙吃鱼
小利喂大狗
大狗啃骨头