博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 8-6 抽象的练习
阅读量:4945 次
发布时间:2019-06-11

本文共 5127 字,大约阅读时间需要 17 分钟。

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 }

 

转载于:https://www.cnblogs.com/LZL-student/p/5860913.html

你可能感兴趣的文章
Windows XP 的最高版本 .net framework 安装
查看>>
本机不装Oracle,使用plsql连接远程Oracle的方法
查看>>
先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。...
查看>>
mysql中间件研究(Atlas,cobar,TDDL)
查看>>
jpa SQL Error: 17006, SQLState: null
查看>>
新的一年来了,先看一看自己的编程能力吧!
查看>>
什么是MVC
查看>>
新建web project不自动生成web.xml解决方案
查看>>
如何快速访问MSDN某一个类或方法的帮助文档
查看>>
SqlServer 删除重复记录
查看>>
win10下sublime text3 使用view in browser的快捷鍵添加方式
查看>>
【Linux】神奇的kill
查看>>
关于radio属性如何添加成为双击取消
查看>>
Servlet的生命周期
查看>>
《Linux 性能及调优指南》1.1 Linux进程管理
查看>>
Spring Security使用心得
查看>>
操作系统简介
查看>>
【IntelliJ 】IntelliJ IDEA 15 创建maven项目
查看>>
mysql中的union用法以及子查询综合应用
查看>>
jQuery使用总结
查看>>