24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

Java面向对象基础:什么是类、属性、方法,属性和方法的互相制约

2017-06-27 11:26:29 东方博宜 阅读

1、面向对象

类:属性和方法的集合,是对象的抽象(类似于图纸的概念)!

对象:对象是类的实例!(类似于根据图纸的设计来创造产品)

 

灯泡属性:亮度(功率)、大小、颜色、品牌、形状……

灯泡的方法:开灯、关灯!

 

人的属性:身高、体重、性别、面貌、国籍、身份证号、年龄……

人的方法:走路、打架、跑、跳、讲话……

 

注意:面向对象的方法,是非静态的!(static是用来标记方法是否面向对象)

 

什么是面向对象的方法?

如果一个方法必须要由对象来调用(必须要等到对象的出现才能调用),则其是面向对象的方法!面向对象的方法,是非静态方法!

 

注意:一个java文件中可以有多个类,但只能有一个类是public的,声明为public的类的类名要和文件名一致!

 

例子:设计一个球员类(Player),有姓名(String name)、身高(double height)、编号(int num)属性,有跑、投篮的方法!

/**

 * 文档注释:

 * @author haiqing.song

 * 球员类

 */

public class Player {

 

    //属性

    public String name;

    public double height;

    public int num;

   

    //方法

    //

    public void run(){

       System.out.println("奔跑中……");

    }

   

    //投篮

    public void shoot(){

       System.out.println("投篮……");

    }

}

 

/**

 * 测试类

 */

class TestPlayer{

    public static void main(String[] args) {

       int x = 10;

       //生成一个球员对象

       Player p = new Player();

       //为球员的属性赋值

       p.name = "奥尼尔";

       p.height = 210;

       p.num = 21;

      

       //输出对象的属性的值

       System.out.println("姓名:" + p.name + ",身高:" + p.height + ",编号:" + p.num);

      

       //调用p对象的方法

       p.run();

       p.shoot();

    }

}

 

例子:写一个猫类(Cat),有名字(String name)、颜色(char color)属性,有睡觉(sleep)、展示(show)方法!

写一个测试类,生成一只猫的对象,为这个对象属性赋值为,名字“小喵”,颜色“白”,输出该小喵的各个属性,调用一下小喵的各个方法!

在方法中使用属性!

package com.baidu.demo;

 

/**

 * 猫的类

 * @author Administrator

 *

 */

public class Cat {

 

    //属性

    public String name;

    public char color;

   

    //睡觉

    public void sleep(){

       System.out.println(name + "在睡觉!");

    }

   

    //显示猫的属性的值(方法可以直接使用属性的值)

    public void show(){

       System.out.println("猫的名字:" + name + ",猫的颜色:" + color);

    }

}

 

/**

 * 测试类

 * @author Administrator

 *

 */

class TestCat{

    public static void main(String[] args) {

       Cat c = new Cat();//生成对象

       c.name = "小喵";

       c.color = '';

       c.sleep();

       c.show();

      

       //生成第二个猫对象

       Cat c2 = new Cat();

       c2.name = "小黑";

       c2.color = '';

       c2.sleep();

       c2.show();

    }

}

 

 image.png

2、属性和方法之间的互相制约

方法改变属性的值,属性制约方法的运行!

例子:新建一个游戏人物类(Person),有:姓名(name)、能量值(blood)、食物(food)属性,有显示人物属性的方法!

有战斗(fight)、吃饭(eat)方法,每战斗一次,消耗5个点的能量;每吃饭一次,消耗3个点的食物,增加2个点的能量!

写一个测试类,生成一个姓名为:“张无忌“,初始能量10个点,初始食物3个点!调用张无忌的战斗和吃饭方法测试!

 

/**

 * 游戏人物类

 */

public class Person {

 

    //属性

    public String name;

    public int blood;

    public int food;

   

    //方法

    public void show(){

       System.out.println("姓名:" + name + ",能量值:" + blood + ",食物数量:" + food);

    }

   

    //战斗

    public void fight(){

       //如果blood > 0,则可以fight

       if(blood > 0){

           System.out.println(name + "战斗中!");

           blood = blood - 5;

          

           //追加判断,看看fight结束是否game over

           if(blood <= 0){

              blood = 0;//防止负的blood的值的出现

              System.out.println("GAME OVER!");

           }

       }else{

           System.out.println("GAME OVER!");

       }

    }

   

    //吃饭

    public void eat(){

       //如果blood > 0food >= 3,则可以补充能量

       if(blood > 0 && food >= 3){

           System.out.println(name + "补充能量!");

           food = food - 3;

           blood = blood + 2;

       }else{

           //判断是哪种情况不满足

           if(blood <= 0){

              System.out.println("GAME OVER!");

           }else{

              System.out.println("食物不足,请尽快补充!");

           }

       }

    }

}

 

class TestPerson{

   

    public static void main(String[] args) {

       //生成对象

       Person p = new Person();

       //为属性赋值

       p.name = "张三丰";

       p.blood = 4;

       p.food = 3;

      

       p.show();

       p.fight();

       p.show();

       p.eat();

       p.show();

       p.eat();

       p.fight();

    }

}

 

问题:重构上述main的测试,输入整数1是命令张三丰去fight、输入整数2是命令他去eat()、输入整数3是show(),可以无限输入,直到GAME OVER,或者输入-1来结束程序!

 

import java.util.Scanner;

 

/**

 * 游戏人物类

 */

public class Person {

 

    //属性

    public String name;

    public int blood;

    public int food;

   

    //方法

    public void show(){

       System.out.println("姓名:" + name + ",能量值:" + blood + ",食物数量:" + food);

    }

   

    //战斗

    public void fight(){

       //如果blood > 0,则可以fight

       if(blood > 0){

           System.out.println(name + "战斗中!");

           blood = blood - 5;

          

           //追加判断,看看fight结束是否game over

           if(blood <= 0){

              blood = 0;//防止负的blood的值的出现

              System.out.println("GAME OVER!");

           }

       }else{

           System.out.println("GAME OVER!");

       }

      

       //调用show()方法

       show();

    }

   

    //吃饭

    public void eat(){

       //如果blood > 0food >= 3,则可以补充能量

       if(blood > 0 && food >= 3){

           System.out.println(name + "补充能量!");

           food = food - 3;

           blood = blood + 2;

       }else{

           //判断是哪种情况不满足

           if(blood <= 0){

              System.out.println("GAME OVER!");

           }else{

              System.out.println("食物不足,请尽快补充!");

           }

       }

      

       //调用show()方法

       show();

    }

}

 

class TestPerson{

   

    public static void main(String[] args) {

       //生成对象

       Person p = new Person();

       //为属性赋值

       p.name = "张三丰";

       p.blood = 20;

       p.food = 10;

      

       Scanner sc = new Scanner(System.in);

       //死循环

       while(true){

           System.out.println("请输入您的指令,1代表战斗,2代表补充能量,3代表show-1结束程序:");

           int n = sc.nextInt();//读入一个整数

          

           if(n == 1){

              p.fight();

           }else if(n == 2){

              p.eat();

           }else if(n == 3){

              p.show();

           }else if(n == -1){

              break;//停止循环

           }else{

              System.out.println("输入有误,请重新输入指令:");

           }

          

           //如果能量为0,则也需要停止循环

           if(p.blood <= 0){

              break;

           }

          

       }

    }

}


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn