分析:从具体到抽象
实现:从抽象到具体
使用:具体的
/*
抽象类之猫狗案例
动物 abstract class Animal :
成员变量:姓名、年龄
构造方法
成员方法:abstract void eat();
猫 extends 动物 :
构造方法
成员方法:重写eat()
狗 extends 动物:
构造方法
成员方法: 重写eat()
*/
abstract class Animal{
private String name;
private int age;
public Animal(){}
public void setName(String name){
this.name= name;
}
public void setAge(int age){
this.age= age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
//将eat功能定义为抽象方法
public abstract void eat();
}
class Cat extends Animal{
//重写eat方法
public void eat(){
System.out.println("猫吃鱼");
}
//添加自己新的功能
public void playGame(){
System.out.println("猫捉迷藏");
}
}
class Dog extends Animal{
//重写eat方法
public void eat(){
System.out.println("狗吃肉");
}
//添加自己的新功能
public void lookDoor(){
System.out.println("狗看门");
}
}
//测试类
class CatDogDemoAbstract{
public static void main(String[] args){
//养只猫
Cat c= new Cat();
c.setName("叮当");
c.setAge(1);
String cname= c.getName();
int cage= c.getAge();
System.out.println("我养了只小猫,它的名字叫:"+cname+",它今年:"+cage+"岁");
c.eat();
c.playGame();
System.out.println("---------");
//养只狗
Dog d= new Dog();
d.setName("酷酷");
d.setAge(2);
String dname= d.getName();
int dage= d.getAge();
System.out.println("我养了只小狗,它的名字叫:"+dname+",它今年:"+dage+"岁");
d.eat();
d.lookDoor();
/*---------------方式二:多态------------*/
//如果没有牵扯到程序的扩展性,就不用多态。本案例推荐用方式一
System.out.println("------------------------------------------");
//向上转型
Animal a= new Cat();
a.setName("叮当");
a.setAge(1);
String aname= a.getName();
int aage= a.getAge();
System.out.println("我养了只小猫,它的名字叫:"+aname+",它今年:"+aage+"岁");
a.eat(); //这里是可以的。
//要调用子类特有的功能,向下转型
Cat c1= (Cat)a;
c1.playGame();
}
}
/*
程序测试结果:
我养了只小猫,它的名字叫:叮当,它今年:1岁
猫吃鱼
猫捉迷藏
---------
我养了只小狗,它的名字叫:酷酷,它今年:2岁
狗吃肉
狗看门
------------------------------------------
我养了只小猫,它的名字叫:叮当,它今年:1岁
猫吃鱼
猫捉迷藏
*/