/*
* 猫狗案例:
* 具体实物:
* 猫,狗
*共性:
* 名字,年龄,吃饭
*分析:从具体到抽象
* 猫:
* 成员变量:姓名,年龄
* 构造方法:有参,无参
* 成员方法:吃饭(猫吃鱼)
* 狗:
* 成员变量:姓名,年龄
* 构造方法:有参,无参
* 成员方法:吃饭(狗吃肉)
*因为猫和狗有共性的东西,所以提取出了一个父类,定义名字Animal
*但是由于猫和狗的吃饭的内容不一样,吃饭的方法定义为抽象的。
*有因为这个方法是抽象的,所以这个类也必须是抽象的类(abstract).
*
* 抽象的动物类:
* 成员变量:姓名,年龄
* 构造方法:有参,无参
* 成员方法:吃饭
* :
*
*实现:从抽象到具体
* 动物类:
* 成员变量:姓名,年龄
* 构造方法:有参,无参
* 成员方法:吃饭 (抽象的方法用abstract修饰)
* 狗类:(继承自父类)
* 重写吃饭方法();
* 猫类:(继承自父类)
* 重写吃饭方法();;
*
*/
//定义抽象的动物类
abstract class animal{
//名字
private String Name;
//年龄
private int age;
//构造方法
public animal(){}
//方法1 构造方法初始化Name和Age
public animal(String Name,int age){
this.Name = Name;
this.age = age;
}
//抽象的吃 方法
public abstract void eat();
//方法2 SetXxx/GetXxx姓名和年龄的赋值
public void SetName(String Name){
this.Name = Name;
}
public String GetName(){
return Name;
}
public void SetAge(int age){
this.age = age;
}
public int GetAge(){
return age;
}
}
//定义猫类
class Cat extends animal {
public void eat(){
System.out.println("猫吃鱼");
}
public Cat(){}
public Cat(String Name, int age){
super(Name,age);
}
public void play(){
System.out.println("躲猫猫");
}
}
//定义狗类
class Dog extends animal {
public Dog(){}
public Dog(String Name, int age){
super(Name,age);
}
public void eat(){
System.out.println("狗吃肉");
}
public void play(){
System.out.println("旺财追皮球");
}
}
public class adstractTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//方法1
Dog d = new Dog();
d.SetName("旺财");
d.SetAge(3);
System.out.println(d.GetName()+d.GetAge());
d.eat();
System.out.println("---------------");
//方法2
Cat c = new Cat("汤姆",2);
System.out.println(c.GetName()+c.GetAge());
c.eat();
System.out.println("---------------");
//多态版
animal a = new Dog();
a.SetName("旺财_多态");
a.SetAge(30);
System.out.println(a.GetName()+a.GetAge());
a.eat();
System.out.println("---------------");
animal a1 = new Cat("汤姆_多态",20);
System.out.println(a1.GetName()+a1.GetAge());
//向下转换
Cat a2 = (Cat)a1;
a2.play();
Dog a3 = (Dog)a;
a3.play();
}
}
|
|