java 8-6 抽象的练习

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()+"	"+c.getAge()+"	");
 81 c.eat();
 82 System.out.println("----------");
 83 
 84 //方式2 具体类用法
 85 Dog3 d = new Dog3("哈士奇",1);
 86 System.out.print(d.getName()+"	"+d.getAge()+"	");
 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()+"	"+a.getAge()+"	");
 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()+"	"+a.getAge()+"	");
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()+"	"+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()+"	项目收入:"+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()+"	"+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()+"	"+a.getAge());
123 System.out.println("--------------");
124 //向下转型
125 daTeacher a2 = (daTeacher)a;
126 a2.yanjiu();
127 System.out.println(a2.getName()+"	"+a2.getAge()+"	项目收入:"+a2.getMoney());    
128 a.eat();    
129 }
130 }
何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
原文地址:https://www.cnblogs.com/LZL-student/p/5860913.html