面向对象(类、封装、this、构造方法)

package com.it.day07.Demo01;
/**
 * 面向对象(类、封装、this、构造方法)
 * 
 * 三大特征是:封装,继承,多态
 *     理解面向对象思想:在刚刚学习javaee编程,比如水仙花,首先是搞清楚要做什么,然后分析怎么做,最后代码的实现。
 * 每一步骤我们都是参与者,并且需要面对具体的每一个步骤和过程,这是面向过程的表现。
 * 那么什么事面向对象开发呢?
 * 在刚学习编程需求简单单一,只要按照步骤去操作,这样没问题,毕竟开发会跟着需求增多而修改,功能增多。开始思索,
 * 能不能把这些步骤,根据不同的功能,进行封装,公共的部分进行封装,用的时候,找到相应的类就可以了,这就是面向对象思想。
 * 
 * 面向对象的思想:
 * 1.面向对象是基于面向过程的编程思想。
 * 2.面向过程:强调是每一个功能的步骤。
 * 3.面向对象:强调的是对象,然后由对象去调用。
 * @author zx
 */
public class ObjectOriented {

}
package com.it.day07.Demo01;
/**
 * 类与对象及使用
 * 定义一个类,用来模拟现实世界中的学生的事物
 * 学生事物包含两个部分:
 * 		属性:姓名、年龄、性别
 * 		行为:吃饭、睡觉、学习
 * 对应到类中:
 * 		成员变量(属性)
 * 			String name;
 * 			int age;
 * 			boolean ex;
 * 		成员方法(行为)
 * 			public void eat(){...}//吃饭
 * 			public void sleep(){...}//睡觉
 * 			public void study(){...}//学习 
 * 注意事项
 * 1.如果一个变量直接定义在类中,不在方法中,那么这就是一个成员变量。
 * 2.如果一个方法定义的时候,去掉关键字static,那么这就是成员方法。
 * 
 * 对象的创建及其使用
 * 		创建对象:类名 对象名 = new 类名();
 * 使用对象访问类中的成员:
 * 		对象名.成员变量
 * 		对象名.成员方法
 * 
 * 成员变量和局部变量的区别
 * 1.位置不同
 * 		a 成员变量:类中,方法外
 * 		b 局部变量:方法中或者方法生命上(形参)
 * 2.在内存中的位置不同
 * 		a 成员变量:栈内存
 * 		b 局部变量:堆内存
 * 3.生命周期不同
 * 		a 成员变量:随着对象的创建而存在,随着对象的消失而消失
 * 		b 局部变量:随着方法的调用而存在,随着方法调用完而消失
 * 4.初始值不同
 * 		a 成员变量:有默认值 ;b 局部变量:没有默认值,必须先定义,赋值,后使用。
 * @author zx
 */
public class Student {
	//成员方法
	String name;//姓名
	int age;//年龄
	//成员方法
	public void eat(){
		System.out.println("吃饭!!!");
	}	
	
	public void sleep(){
		System.out.println("睡觉!!!");
	}
	
	public void study(){
		System.out.println("学习!!!");
	}
}
package com.it.day07.Demo01;
/**
 * 封装
 * 问题描述:定义Person的时候,无法阻止错误的脏数据被设置到成员变量中。
 * 解决方案:使用一个private关键字将需要保护的成员变量修饰一把。
 * 
 * 一旦被private修饰,那么只有本类当中才可以直接访问。超出了本类的范围,外面不能直接访问。
 * 专门为private的成员编写,编写一对儿成员方法:Setter Getter
 * 
 * 使用private关键字练习定义一个手机类。
 * 
 * 属性:品牌、价格、颜色
 * 行为:打电话、发短信
 * 
 * private关键字:是一个权限修饰符。可以修饰成员(成员变量和成员方法), 被private修饰的成员只在本类才能访问。 * 
 * 需要为每一个private成员变量编写一对儿Setter Getter方法
 * 【特例】对于基本数据类型当中的boolean来说,setXxx规则不变,但是getXxx一定要命名成为isXxx的形式。
 * 
 * 封装的好处:1.通过方法来控制成员变量的操作,提高了代码的安全性;2.把代码用方法进行封装,提高了代码的复用性。
 * 
 * this关键字
 * 		this代表所在类的对象引用;记住:方法被那个类调用,this就代表那个对象
 * @author zx *
 */
public class Phone {
	private String brand; //品牌
	private double price;//价格
	
	public void call(String who){//成员方法 打电话
		System.out.println("给" + who + "打电话");
	}
	
	public void sendMessage(){//成员方法 发短信
		System.out.println("群发短信");
	}
	
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	private String color; //颜色
}
package com.it.day07.Demo01;
/**
 * 构造方法也是一种方法,但是是专门用来创建对象的方法。
 * 当通过new关键字创建一个对象的时候,实际上就是在调用构造方法。
 * 
 * 构造方法的格式:
 * public 类名称(参数类型 参数名称, ...) {
 * 		方法体;
 * }
 * 
 * 注意事项:
 * 1. 构造方法的名称必须和所在的类名称完全一样,大小写也要一样。
 * 2. 构造方法根本不写返回值类型,连void都不写。
 * 3. 如果没有定义任何构造方法,那么编译器(javac)将会赠送一个默认的。
 * 4. 如果自定义了至少一个构造方法,那么编译器将不再赠送构造方法。
 * 5. 构造方法也可以进行重载(Overload):名字一样,参数不一样。
 * @author zx
 *
 */
public class PersonConstructor {
	// 成员变量
	private String name;
	private int age;
	
	//默认构造器
	public PersonConstructor(){
		
	}
	//自定义带参数的构造器
	public PersonConstructor(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
package com.it.day07.Demo01;
/**
 * 类是一种引用类型,不能直接使用,如果想用这个类,一定要根据这个类创建一个对象 * 
 * 类使用三个步骤:
 * 1.导包
 * 如果使用目标类,和当前类,位于同一个package包下,那么可以省略导包语句不写。
 * 2.创建
 *       数据类型 变量名称 = new 数据类型();
 * 对应:类名称 对象名 = new 类名称();
 * 		 Studend stu = new Student();
 * 3.使用
 * 使用成员变量:变量名.成员变量
 * 使用变量方法:变量名.成员方法();
 * 
 * 如果成员变量没有赋值,那么会有一个默认值。
 * 如果是整数就是0,如果是浮点型就是0.0,如果是字符就是'\u0000',如果是布尔就是true或false
 * 如果是引用类型就是null
 * @author zx
 */
public class Demo02Student {
	
	public static void main(String[] args) {
		
		Student stu = new Student();
		System.out.println(stu.name);//null 成员变量没有初始化默认为初始值
		System.out.println(stu.age);//0		
		stu.eat();
		stu.sleep();
		stu.study();		
	}
}
package com.it.day07.Demo01;
/**
 * 测试调用Phone类对象
 * @author zx *
 */
public class Demo02Phone {
	public static void main(String[] args) {
		Phone phone = new Phone();
		phone.call("马云");
		phone.sendMessage();
	}
}

测试结果:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值