zoukankan      html  css  js  c++  java
  • 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的自学历程...只需坚持
  • 相关阅读:
    “There appears to be trouble with your network connection. Retrying”
    Nignx 处理异常操作流程
    "...do not match previously installed version; ignoring!"
    文档对象模型(DOM)
    Parsing error: Expression expected.
    让人抓狂的缩进冲突(eslint)
    C#中属性PropertyInfo的使用
    C#调用WebService服务(动态调用)
    pdf转word工具
    PASS系统应用技术手册
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5860913.html
Copyright © 2011-2022 走看看