1、 猫狗案例
具体事物:猫,狗 共性:姓名,年龄,吃饭分析:从具体到抽象
猫: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(猫吃鱼) 狗: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(狗吃肉) 因为有共性的内容,所以就提取了一个父类。动物。 但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的, 而方法是抽象的类,类就必须定义为抽象类。 抽象动物类: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(); 实现:从抽象到具体 动物类: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(); 狗类: 继承自动物类 重写吃饭(); 猫类: 继承自动物类 重写吃饭();1 //定义抽象的动物类 2 abstract class Animal3{ 3 4 //定义成员变量 5 private String name; 6 private int age; 7 8 //抽象吃类,必须要进行的方法 9 abstract void eat(); 10 11 //构造方法 12 //无参 13 public Animal3(){} 14 //有参 15 public Animal3(String name,int age){ 16 this.name = name; 17 this.age = age; 18 } 19 20 //get Xxx set Xxx 21 public String getName(){ 22 return name; 23 } 24 public int getAge(){ 25 return age; 26 } 27 public void setName(String name){ 28 this.name = name; 29 } 30 public void setAge(int age){ 31 this.age = age; 32 } 33 34 } 35 36 //定义狗类 37 class Dog3 extends Animal3{ 38 //无参 必须要 , 测试类才能够调用 39 public Dog3(){}; 40 //有参构造方法 41 public Dog3(String name, int age){ 42 super(name, age); 43 } 44 45 public void eat(){ 46 System.out.println("狗吃肉么"); 47 } 48 //特有的方法 49 public void look(){ 50 System.out.println("哈士奇能看门?"); 51 } 52 } 53 54 //定义猫类 55 class Cat3 extends Animal3{ 56 //构造方法,无参,有参 57 public Cat3(){};//必须要 58 public Cat3(String name,int age){ 59 super(name, age); 60 } 61 //成员方法 62 public void eat(){ 63 System.out.println("猫吃鱼吖"); 64 } 65 //特有的方法 66 public void pa(){ 67 System.out.println("猫爬树厉害"); 68 } 69 } 70 71 //测试类 72 73 class AbstractTest1{ 74 public static void main(String[] args){ 75 76 //方法1 具体类用法 77 Cat3 c = new Cat3(); 78 c.setName("波斯猫"); 79 c.setAge(2); 80 System.out.print(c.getName()+"\t"+c.getAge()+"\t"); 81 c.eat(); 82 System.out.println("----------"); 83 84 //方式2 具体类用法 85 Dog3 d = new Dog3("哈士奇",1); 86 System.out.print(d.getName()+"\t"+d.getAge()+"\t"); 87 d.eat(); 88 System.out.println("----------"); 89 90 //方法3 多态方法 91 //先定义为猫 92 Animal3 a = new Cat3(); 93 a.setName("短尾猫"); 94 a.setAge(1); 95 System.out.print(a.getName()+"\t"+a.getAge()+"\t"); 96 a.eat(); 97 System.out.println("----------"); 98 //向下转换 使其能调用猫类特有的方法 99 Cat3 a1 = (Cat3) a;100 a1.pa();101 System.out.println("----------");102 103 //转换为狗类104 a = new Dog3("二哈",1);105 System.out.print(a.getName()+"\t"+a.getAge()+"\t");106 a.eat();107 System.out.println("----------");108 //向下转换 使其能调用狗类特有的方法109 Dog3 d1 = (Dog3) a;110 d1.look();111 }
2、 老师案例
具体事物:小学老师,大学老师 共性:姓名,年龄,讲课。 不同:大学老师比小学老师多了一条成员变量、 分析: 小学老师 姓名,年龄 讲课。 大学老师 姓名,年龄 讲课。 实现: 老师类 小学老师 大学老师1 //定义抽象的老师类 2 abstract class Teacher{ 3 4 //成员变量 5 private String name; 6 private int age; 7 8 //构造方法 9 //无参 10 public Teacher(){} 11 //有参 12 public Teacher(String name,int age){ 13 this.name = name; 14 this.age = age; 15 } 16 17 //getXxx,setXxx方法 18 public String getName(){ 19 return name ; 20 } 21 public int getAge(){ 22 return age; 23 } 24 public void setName(String name){ 25 this.name = name; 26 } 27 public void setAge(int age){ 28 this.age = age; 29 } 30 31 //抽象方法 方法为空 32 public abstract void teacher(); 33 //成员方法 34 public void eat(){ 35 System.out.println("吃饭"); 36 } 37 38 } 39 40 //定义小学老师类 41 class xiaoTeacher extends Teacher{ 42 //构造方法 43 //无参 44 public xiaoTeacher(){} 45 //有参 46 public xiaoTeacher(String name,int age){ 47 super(name,age); 48 } 49 //成员方法 50 public void teacher(){ 51 System.out.println("教小学"); 52 } 53 //特有的方法 54 public void zhaogu(){ 55 System.out.println("照顾小孩子"); 56 } 57 } 58 59 //定义大学老师类 60 class daTeacher extends Teacher{ 61 //构造方法 62 private int money;//大学老师比小学老师多了一项收入,项目收入 63 public daTeacher(){} 64 public daTeacher(String name,int age,int money){ 65 super(name,age); //这2项走父类Teacher的 66 this.money = money;//money走自己这边的 67 } 68 //money的set和get 69 public int getMoney(){ 70 return money; 71 } 72 public void setMoney(int money){ 73 this.money = money; 74 } 75 //成员方法 76 public void teacher(){ 77 System.out.println("教大学"); 78 } 79 //特有方法 80 public void yanjiu(){ 81 System.out.println("做研究或项目"); 82 } 83 } 84 85 //测试类 86 class AbstractTest2{ 87 //具体方法1 88 public static void main(String[] args){ 89 xiaoTeacher x = new xiaoTeacher(); 90 x.setName("张三"); 91 x.setAge(24); 92 System.out.println(x.getName()+"\t"+x.getAge()); 93 x.teacher(); 94 x.zhaogu(); 95 x.eat(); 96 System.out.println("--------------"); 97 98 //具体方法2 99 daTeacher d = new daTeacher("李四",32,5000);100 System.out.println(d.getName()+""+d.getAge()+"\t项目收入:"+d.getMoney());101 d.teacher();102 d.yanjiu();103 x.eat();104 System.out.println("--------------");105 106 //多态方法107 //先小学108 Teacher a = new xiaoTeacher();109 a.setName("小张");110 a.setAge(24);111 System.out.println(a.getName()+"\t"+a.getAge());112 a.teacher();113 a.eat();114 //向下转换115 xiaoTeacher a1 = (xiaoTeacher) a;116 a1.zhaogu();117 System.out.println("--------------");118 119 //转大学120 a = new daTeacher("老李",32,5000);121 a.teacher();122 System.out.println(a.getName()+"\t"+a.getAge());123 System.out.println("--------------");124 //向下转型125 daTeacher a2 = (daTeacher)a;126 a2.yanjiu();127 System.out.println(a2.getName()+"\t"+a2.getAge()+"\t项目收入:"+a2.getMoney()); 128 a.eat(); 129 }130 }