• 方法构造和方法重载之奥特曼与大boss之战


    知识点的总结

    1.类中的方法分为两类:1.普通方法; 2.构造方法。

    2.构造方法的格式:
      public 类名(数据类型  参数名,...){
     }

    3.构造方法的用途:
      1.实例化对象。
      2.初始化属性值。

    4.构造方法和普通方法的区别:
      1.返回值:构造方法一定不能定义返回值类型;构造方法的名字必须要和类名完全一致,包括大小写。
      2.用途
      3.名字

    5.注意:java会给类提供一个无参数的构造方法(默认构造方法),如果你在类中定义了构造方法,
      默认的构造方法会被覆盖,无法在使用默认的,只能使用你自定义的构造方法。

    6.方法重载的条件:
      1.方法名必须要完全一致;
      2.方法所带的参数个数、参数顺序、参数类型至少一个不同。


    例如:

    protected int study(int s){
            score += s;
            System.out.println(name+"的学分是"+score);
            return 0;
        }
        
        public void study(){
            score++;
            System.out.println(name+"正在学习中,学分是"+score);
        }


    7.现实生活中什么样的情况要使用方法重载呢?
      普通方法的重载情况:
       学习开车、学习打游戏
      构造方法的重载情况:
       贾宝玉出生的时候带通灵宝玉,其他的角色是不需要带通灵宝玉。

    8.调用重载后的方法是由调用方法时所给的参数决定的。

    public static void main(String[] args) {
      niming stu = new niming ("张三",3);
      stu.study();
      niming  stu2 = new niming ("李四",3);
         stu2.name = "李四";
      stu2.study(10);
      
     } 

    9.当你参数名和属性名完全一致的情况下,给属性名加上"this.",这样才会表示属性,否则表示的是参数。(因为就近原则,就近的是参数,而不是属性)
      this表示的是的当前调用方法的对象。
      假设a对象名在调用方法,那么方法中this就表示a对象。

    public niming(String name,int score){
            this.name = name;
            this.score =score ;
        }

    实例:

    package s522;
    
    public class Role {
        public String name;
        public int blood;
        public int attack;
        //定义一个构造方法
     public Role(String name,int blood,int attack){
         this.name=name;
         this.blood=blood;
         this.attack=attack;
     }
        public void PK(Role role) {
            role.blood -= attack;
            System.out.println(name + "正在攻打" + role.name + "," + role.name
                    + "剩余血量是:" + role.blood);
        }
        public static void main(String[] args) {
            Role a1 = new Role( "奥特曼A",100,5);
            Role a2 = new Role("奥特曼B",100,5);
            Role m1 = new Role("小怪兽A",100,3);
            Role m2 = new Role("小怪兽B",100,3);
            while (a1.blood > 0 && m1.blood > 0) {
                a1.PK(m1);
                if (m1.blood <= 0) {
                    System.out.println(a1.name + "胜利!");
                    break;
                }
                m1.PK(a1);
                if (a1.blood <= 0) {
                    System.out.println(m1.name + "胜利!");
                    break;
                }
            }
            if (a1.blood > 0) {
                while (a1.blood > 0 && a2.blood > 0) {
                    a1.PK(a2);
                    if (a2.blood <= 0) {
                        System.out.println(a1.name + "胜利!");
                        break;
                    }
                    a2.PK(a1);
                    if (a1.blood <= 0) {
                        System.out.println(a2.name + "胜利!");
                        break;
                    }
                }
            }
            else {
                while (m2.blood > 0 && m1.blood > 0) {
                    m2.PK(m1);
                    if (m1.blood <= 0) {
                        System.out.println(m2.name + "胜利!");
                        break;
                    }
                    m1.PK(m2);
                    if (m2.blood <= 0) {
                        System.out.println(m1.name + "胜利!");
                        break;
                    }
                }
            }
    
        }
    
    }

    上面的方法用了构造法,没有用到方法重载,如果要用方法重载,思路是:写两个方法体,一个是奥特曼打小怪兽,一个是奥特曼打大boss.

    // 普通方法重载
        public void PK(String name) {
      /*
       * 这里表示的是:参数的血量=参数的血量-被攻击的能量。例如:a1.PK("小怪兽");
       *  则表示:小怪兽的血量=小怪兽的血量-奥特曼的攻击能量
       */
      this.blood -= attack;
      System.out.println(name + "正在攻打" + this.name + "," + this.name
        + "剩余血量是:" + this.blood);
     }
     // 普通方法方法重载
     public void PK(boss b) {
      b.blood -= attack;
      System.out.println(name + "正在攻打" + b.name + "," +b.name + "剩余血量是:"
        + b.blood);
     }
    public static void main(String[] args) { boss a1 = new boss("奥特曼", 200, 5); boss a2 = new boss("小怪兽", 100, 3); boss m1 = new boss("大boss", 100, 3); while (a1.blood > 0 && a2.blood > 0) { a2.PK("奥特曼"); if (a1.blood <= 0) { System.out.println(a2.name + "胜利!"); break; } a1.PK("小怪兽"); if (a2.blood <= 0) { System.out.println(a1.name + "胜利!"); break; } } if (a1.blood > 0) { while (a1.blood > 0 && m1.blood > 0) { a1.PK(m1); if (m1.blood <= 0) { System.out.println(a1.name + "胜利!"); break; } m1.PK(a1); if (a1.blood <= 0) { System.out.println(m1.name + "胜利!"); break; } } }

    运行的结果:

  • 相关阅读:
    JasperReport笔记
    关于iReport5.6.0无法正常启动或者闪退或者JDK8不兼容的解决方案
    sublime text3 3176激活
    直播技术之编码和封装
    直播技术之推流和传输
    Quic协议剖析
    Glide Picasso和Fresco的对比
    MVP架构学习
    反向打印链表
    重建二叉树
  • 原文地址:https://www.cnblogs.com/java-7/p/5666499.html
Copyright © 2020-2023  润新知