面向对象---抽象和封装

1.对象的使用

类:对同一类具有相同属性和行为的事物的描述

对象:肉眼能够看得见摸得着的,能够被我们具体所描述出来的

对象有属性和方法(行为)

对象和类的关系:对象是类的具体实现,类是模板用来生产对象

public class Hero {
	//昵称,
	String name="萧峰";
	//生命值
	int health=100;
    //忠诚度
	int loyalty=0;
	//职业
	String occupation="战士";
	String address="郑州";
	//输出英雄信息
	public void print() {
		System.out.println("英雄的介绍:\n我的昵称是"+name+"\t生命值"+health+"\t忠诚度"+loyalty+"\t职业是"+occupation);
	}
	public void print03() {
		System.out.println("雇佣兵的介绍:\n我的昵称是"+name+"\t生命值"+health+"\t出生地"+address);
	}
	//带返回值的方法
	//谁调用这个方法,谁用这个方法的返回值
	public String print01() {
		name="大乔";
		return name;
	}
	//有参方法   this--这个类的对象
	public void print02(String name,int loyalty) {
		this.name=name;
		this.loyalty=loyalty;
	}
    
    public static void main(String[] args) {
		Hero hero=new Hero();
		hero.name="小乔";
		hero.health=500;
		hero.loyalty=100;
		hero.occupation="法师";
		hero.print();
	}

演示示例:购买人物

import java.util.Scanner;

import shili1.Hero;
import shili2.Army;

public class Test{
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("欢迎您来到本网游!");
	    //1.输入人物昵称
	    System.out.println("请输入要购买人物的昵称:");
	    String name=input.next();
	    //2.选择人物类型
	    System.out.print("请选择要购买的人物类型:(1、英雄2、雇佣兵)");
	    int flag=input.nextInt();
	    switch  (flag)  {
	    case 1:
	    //如果是英雄,选择英雄职业
	    System.out.print("请选择英雄的职业:(1、骑士"+
	    "2、法师)");
	    int zhiFlag = input.nextInt();
	    String occupation = null;
	    if  (zhiFlag ==1)  {
	    occupation ="骑士";
	    }else{
	    occupation="法师";
	    }
	    Hero hero = new Hero();
	    hero.occupation=occupation;
	    hero.name=name;
	    hero.print();
	    hero.loyalty=90;
	    hero.health=90;
	    break;
	    default:
	    	//如果是雇佣兵,选择雇佣兵出生地
	    	System.out.println("请选择雇佣兵的出生地:(1、盗贼公社 2、弓箭手营房)");
	    	int bthFlag = input.nextInt();
	    	String birth = null;
		    if  (bthFlag==1)  {
		    birth ="盗贼公社";
		    }else{
		    birth="弓箭手营房";
		    }
		    Army army = new Army();
		    army.name=name;
		    army.birth=birth;
		    army.print();
	    	break;
	    }
	}
}

2.构造函数

  • 定义:方法名和类名相同,无返回值

  • 作用:用来给对象进行初始化值

  • 类在被创建的时候,虚拟机会提供给我们一个无参构造函数。如果你写了一个构造函数,那么虚拟机提供的无参构造函数会被删除,所以一定要把无参构造函数写上

  • 构造函数的重载:方法名和类名相同,参数类型和个数不同

    /**
    	 * 构造方法 
    	 * 方法的重载:方法名和类名一样,参数列表不同(参数的类型和个数不同)
    	 */
    	//无参构造方法
    	public Hero(){
    		
    	}
    	public Hero(String name) {
    		this.name=name;
    	}
    	public Hero(String name,int health) {
    		this.name=name;
    		this.health=health;
    	}
    	public static void main(String[] args) {
    		Hero hero=new Hero();
    		String name=hero.print01();
    		hero.print();
    		
    		hero.print02("提莫", 500);
    		hero.print();
    		
    	}

    3.static修饰符

    静态方法只能调用静态方法和非静态属性

    static不能修饰局部变量

    static修饰变量是一个类变量(全局变量),优先加载

    修饰代码块

    静态属性直接类名.属性/方法

    4.final修饰变量----常量

    /**
     * final的用法
     */
    
    public class TestSample5 {
    	public static void main(String[] args) {
    		Hero hero1 = new Hero();
    		HeroSex heroSex = new HeroSex();
    		System.out.println("第一个英雄的性别是" + hero1.sex + "。");
    		Hero hero2 = new Hero();
    		hero2.sex = heroSex.SEX_WOMEN;
    		System.out.println("第二个英雄的性别是" + hero2.sex + "。");
    		Hero hero3 = new Hero();
    		hero3.sex = heroSex.SEX_MAN;
    		System.out.println("第三个英雄的性别是" + hero3.sex + "。");
    	}
    }

    5.封装

    概念:封装是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

    封装的步骤:1.属性私有化(private)

    2.给属性get,set方法

    get方法对象取值,set方法对象赋值 

        3.封装的好处

  • 隐藏类的实现细节

  • 方便地加入存取控制语句

  • 增加安全性和可扩展性,限制不合理操作  

6.this关键字

this通常指当前对象的引用,可以调用当前对象的成员

this.name;//调用当前对象的属性
this.print();//调用当前对象的方法
  • 使用this调用成员变量,解决成员变量和局部变量的同名冲突

    public void setName(String name){
        this.name=name;   //成员变量和局部变量同名,必须使用this
    }
    public void setName(String n){
        n=name;   //成员变量和局部变量不同名,this可以省略
    }

  • 使用this调用成员方法

    public void work(int n){
        health=health-n;
        this.print();    //this可以省略,直接调用print()
    }

  • 使用this调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句

    this只能调用实例变量、实例方法和构造方法

    public Army(String name,String birth){
            this(name,birth);  //调用重载的构造方法
            this.name=name;
            this.name=birth;
    }


版权声明:本文为m0_67220270原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。