Java面向对象

一、面向对象

  • 定义【面试必备】:面向对象是一种编程思想,对象是指现实生活中的具体存在事物,是类的具体描述。【例如:一辆超跑跟超跑设计图纸==》图纸即为类,造出来的超跑就是对象】。
  • 类是指一组具有相同或者相似的属性、行为的统称,是对象的抽象。
  • 类的创建:
    /**
     * 创建Dog类
     * 	抽取狗子的特征,定义为属性
     * 	抽取狗子的行为,定义为方法
     * @author Dushine2008
     *
     */
    public class Dog {
    	// 属性--品种-哈士奇、年龄-3、名字-道哥、颜色-黑白
    	String breed;
    	int age;
    	String name;
    	String color;
    	
    	// 方法
    	public void eat(String food) {
    		System.out.println("狗子喜欢吃:" + food);
    	}
    	
    	public void sleep(int hour) {
    		System.out.println("我们家的狗子每天睡觉时长是" + hour);
    	}
    	
    }
  • 对象的创建:【类是对象的模板,可以使用类创建出无数个具体的对象】
    • 语法格式:类名 对象名 = new 类名(参数列表);
    • public class DogTest {
      	public static void main(String[] args) {
      		Dog dog = new Dog();
      		// 调用方法
      		dog.eat("骨头");
      		dog.sleep(8);
      		
      		// 调用属性,属性如果没有提前赋值,得到的是默认值
      		int age = dog.age;
      		System.out.println(age);
      		
      		// 给dog的属性赋值
      		dog.breed = "哈士奇";
      		dog.name = "二哈";
      		dog.age = 3;
      		dog.color = "黑白";
      		
      		// 调用dog的属性
      		System.out.println("狗子的品种是:" + dog.breed);
      		System.out.println("狗子的名字是:" + dog.name);
      		System.out.println("狗子的年龄是:" + dog.age);
      		System.out.println("狗子的颜色是:" + dog.color);
      	}
      }
    • 图解【创建单个对象】:
    • 图解【创建多个对象】:

 

二、局部变量和实例变量

类型  局部变量 实例变量(成员变量)
定义位置 方法内部 类中方法外
存储位置 栈内存  堆内存
默认值 无,必须赋值在使用 有默认值,和数据类型有关
作用范围 整个方法 整个类
生命周期 创建方法到方法的结束 随着对象的创建而创建,对象的消失而消失
命名冲突 方法中不能存在重名的变量 可以和局部变量重名,局部变量优先级高

三、实例方法

  • 定义:创建方法后可以使用对象调用的方法,每个方法都是独立存在的,不能写在其他方法中,不能使用static修饰,使用static修饰就变成类方法。
  • 案例:
    public class Student {
    	// 属性  
    	String name;
    	
    	
    	/**
    	 * 见面打招呼的方法【实例方法】
    	 * @param word	打招呼的内容
    	 */
    	public void sayHi(String name) {
    		System.out.println(name+"是一个好学生);
    	}
    
    
    //调用实例方法
    	public static void main(String[] args) {
    		// 创建学生对象stu01
    		Student stu01 = new Student();
    		stu01.name = "张飞";
    		
    		//调用实例方法
    		stu01.sayHi("我乃燕人张翼德");
    		
    	}
    }

四、方法重载

  • 重载(Overload):一个类中定义多个相同名称的方法
  • 要求:方法名相同;参数列表不同(类型、个数、顺序);与访问修饰符、返回值类型无关
  • 注意:调用带有重载方法时,需要根据传入的实参去找到与之匹配的方法。
  • 好处:灵活、方便、屏蔽使用差异。

五、构造方法

  • 定义:构造方法是一种特殊的方法,创建对象时候调用,方法名必须和类名一致,没有返回值类型,无法在外部手动调用
  • 语法格式:public 类名(参数列表){   构造方法体   }
  • 案例:
    public class Demo01 {
    	public static void main(String[] args) {
                    //调用无参构造方法
    		Stu stu01 = new Stu();
    		System.out.println("==============");
    		
                    //调用有参构造方法
                    Stu stu01 = new Stu(“张三”,25);
    	}
    }
    class Stu{
    	//无参构造方法
    	public Stu() {
    		System.out.println("我是Stu空参的构造方法");
    	}
          
          // 属性name和age
    	String name;
    	int age;
          //有参构造方法
         public Stu(String name,int age) {
    		System.out.println("我是Stu空参的构造方法");
    	}
    }
  • 默认构造方法:在我们创建类的时候,如果没有写任何的构造方法,jvm会赠送一个空参的构造方法,若自己定义了则不赠送

六、this

  • 定义:This是类中的默认引用,代表当前实例
  • 当类服务于某个对象时,this则指向当前对象
  • this的用法
    • 第一种用法【调用实例属性、实例方法】
      • 如:this.name、this.sayHi()
      • 案例:
    • 第二种用法【调用本类的其他构造方法】
      • 如this()、this(实参)
      • 案例:

七、ATM小案例:

import java.util.Scanner;

public class Demo07 {
	
	public static void main(String[] args) {
		/**
		 * 银行ATM
				模拟银行账户业务,实现存款、取款和余额查询。运行效果如下所示:
			
				1.存款  2.取款  3.查询  0.退出
				请选择你要办理的业务:1
				请输入存款金额:1000
				---------
				存款成功!
			
				1.存款  2.取款  3.查询  0.退出
				请选择你要办理的业务:2
				请输入取款金额:100
				---------
				取款成功!
			
				1.存款  2.取款  3.查询  0.退出
				请选择你要办理的业务:3
				---您当前账户余额:900元---
			
				1.存款  2.取款  3.查询  0.退出
				请选择你要办理的业务:0
			
				O(∩_∩)O谢谢您的使用,欢迎下次光临!
		 */
		Scanner in = new Scanner(System.in);
		// 创建银行卡
		ATM atm = new ATM(1000);
		
		// 开启死循环,不断提示用书输入数据
		outer:while (true) {
			System.out.println("1.存款  2.取款  3.查询  0.退出\r\n请选择你要办理的业务:");
			int select = in.nextInt();
			
			switch (select) {
			case 0:
				System.out.println("O(∩_∩)O谢谢您的使用,欢迎下次光临!");
				break outer;
			
			// 存款的操作
			case 1:
				System.out.println("请输入存款金额:");
				int m1 = in.nextInt();
				atm.saveMoney(m1);
				System.out.println("成功存入金额:" + m1 + ",余额:" + atm.getBalance());
				break;
				
			// 取款的操作
			case 2:
				System.out.println("请输入取款金额:");
				int m2 = in.nextInt();
				double ret = atm.takeMoney(m2);
				// 判断ret是否大于0
				if (ret == m2) {
					System.out.println("成功取出:" + m2 + ",余额:" + atm.getBalance());
				}else {
					System.out.println("余额不足");
				}
				break;
				
			// 查询余额
			case 3:
				System.out.println("当前账户余额:" + atm.getBalance());

			default:
				System.out.println("输入有误,请再次输入...");
				break;
			}
		}
	}
}

/**
 * 自助柜员机
 * 	定义了余额
 * 	定义存、取、查询的方法
 * @author Dushine2008
 *
 */
class ATM{
	// 属性:余额
	double balance;
	
	// 构造方法
	public ATM() {}
	
	public ATM(double balance) {
		this.balance = balance;
	}
	
	// 存钱
	public void saveMoney(int money) {
		this.balance += money;
	}
	
	// 取钱
	public double takeMoney(int money){
		// 判断余额是不是充足
		if (money <= balance) {
			this.balance -= money;
			return money;
		}
		
		return 0;
	}
	
	// 查询
	public double getBalance() {
		return this.balance;
	}
}

  

posted @ 2020-09-13 17:08  MyHours  阅读(213)  评论(0编辑  收藏  举报