Java学习分享—【面向对象基础】 封装、权限修饰符等...

封装

1.相关概念

java有三大特性:封装、继承、多态

封装是面向对象的思想的特性

对属性、方法、类、项目 进行封装

内部类也是封装的体现

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互.


在程序设计的过程中要追求“高内聚,低耦合”。

高内聚:就是类的内部数据操作细节自己来完成,不允许外部干涉,

低耦合:就是, 仅暴露少量的方法给外部使用


通常,应禁止直接访问一个对象中数据的实际表示,而是应该通过操作接口来访问,这叫信息隐藏

 2.对属性进行封装

对成员变量加修饰符 private  JavaBean规范

实体类中写set和get方法 【快捷键】

代码示例:

//
class Pandas{
	private String name;
	private int age;
	private double weight;
	private double height;
	//快捷键 source  -- Generate 
	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;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	
	
	
}
public class Test_01 {

	public static void main(String[] args) {
		Pandas pandas = new Pandas();
		pandas.setName("圆圆");
		pandas.setAge(6);
		pandas.setWeight(160.2);
		pandas.setHeight(173.3);
		System.out.println(pandas.getName()+pandas.getAge()+pandas.getWeight()+pandas.getHeight());
	}
}

 权限修饰符

public 公开的

private 私有的

protected 受保护的

default 默认的(不写就是默认的)

权限修饰符去修饰 类,成员变量,成员方法 等。赋予他们不同的权限

权限修饰符
1. private ( 当前类访问权限 )
使用 private 修饰的 成员 只能在 当前类的内部 被访问。常用于修饰 成员变量 ( 封装 )。

2. default ( 包访问权限 )
默认权限修饰符。使用 default 修饰的 成员或外部类 可以被 相同包下的其他类 访问。

3. protect ( 子类访问权限 )
使用 protect 修饰的 成员 既可以被 同一个包中的其他类 访问,也可以被 不同包中的子类 访问。常用于修饰 希望被子类重写的方法 ( override )。

4. public ( 公共访问权限 )
使用 public 修饰的 成员或者外部类 可以被 所有类 访问。

 

 this关键字

1.放在类中,用来表示当前对象

可以用this调用属性和方法

this关键字只能用在方法(成员\构造)中

2.this 很少用于调用当前的构造方法

3.this()只能在构造方法的第一行

代码示例:

class Rabbit {
	 String name;
	 int age;
	
	public Rabbit(String name, int age) {
		//this();//在调用无参构造
		this.name = name;
		this.age = age;
	}
	public Rabbit() {
		//在Rabbit的无参构造方法中调用了有参的构造方法
		this("狗狗", 12);
		//这个this 就是rabbit1
		System.out.println(this);//代表的当前的对象 打印的是一个内存地址	
	}
	//写一个方法
	//在main主函数中调用eat
	//对象.eat();  哪个对象调用 的eat方法  this就是那个对象
	public void eat() {
		//可以使用this调用属性
		this.name = "狗蛋";
		System.out.println(this.name);
		//可以使用this调用方法
		this.test();
	}
	public void test () {
		System.out.println("这个是测试方法");
	}	
}
public class Demo6 {
	public static void main(String[] args) {
		Rabbit rabbit1 = new Rabbit();
		System.out.println(rabbit1);
		//rabbit1.eat();
		System.out.println(rabbit1.name);
		System.out.println(rabbit1.age);
		/**
		 * com.qfedu.b_fengzhuang.Rabbit@15db9742 this
			com.qfedu.b_fengzhuang.Rabbit@15db9742 rabbit1
		 */
		Rabbit rabbit2 = new Rabbit();
		System.out.println(rabbit2);		
		/**
		 * com.qfedu.b_fengzhuang.Rabbit@6d06d69c   this
			com.qfedu.b_fengzhuang.Rabbit@6d06d69c   rabbit2 

		 */	
	}
}

多类合作

一个类对象可以当成另外一个类的成员变量

代码示例:

需求:
	两个宠物一个狗一个猫宠物饿了,需要主人给宠物喂食
	1.不同的宠物吃的不同  //如果是同一个投喂方法 需要传参 这个参数是 猫或狗类 对象 但是这是两个不同类型的 对象 所以要建两种方法? 
											或者一种方法 传不同的参数进去
	2.不同的宠物吃完食体力值增加
	3.主人和狗玩游戏 接飞盘的游戏。狗体力值减去10,但是会和主人的亲密度提升5
	4.主人和猫玩游戏  滚毛球。猫体力值减去12 ,但是会和主人的亲密度提升7
	
	人类
	猫类
	狗类
 */
//人类
class Person{
	private String name;
	private Cat cat;
	private Dog dog;
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
//	public Person(String name, Cat cat, Dog dog) {
//		super();
//		this.name = name;
//		this.cat = cat;
//		this.dog = dog;
//	}
	public Person(String name) {
		super();
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Cat getCat() {
		return cat;
	}
	public void setCat(Cat cat) {
		this.cat = cat;
	}
	public Dog getDog() {
		return dog;
	}
	public void setDog(Dog dog) {
		this.dog = dog;
	}
	//人类喂猫方法
	public void feed(Cat cat) {
		cat.eat();
	}
	//人类喂狗方法
	public void feed(Dog dog) {
		dog.eat();
	}
	//和猫玩
	public void play(Cat cat) {
		cat.fluffBall();
	}
	//和狗玩
	public void play(Dog dog) {
		dog.catchFrisbee();
	}
}
//猫类
class Cat{
	private String name;
	private int strength;//体力值
	private int intimacy;//亲密度
	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

//	public Cat(String name, int strength, int intimacy) {
//		super();
//		this.name = name;
//		this.strength = strength;
//		this.intimacy = intimacy;
//	}

//	public Cat(int strength, int intimacy) {
//		super();
//		this.strength = strength;
//		this.intimacy = intimacy;
//	}
	public int getStrength() {
		return strength;
	}
	//设置猫的体力
	public void setStrength(int strength) {
		if (strength<0 ||strength >100) {
			System.out.println("猫猫的体力值不能小于0且不能大于100");
			throw new IllegalArgumentException("invalid strength value");//体力值无效
		}else {
			this.strength = strength;
		}	
	}
	public int getIntimacy() {
		return intimacy;
	}
	public void setIntimacy(int intimacy) {
		this.intimacy = intimacy;
	}
	//猫eat方法
	public void eat() {
		//每吃一次加10点体力
		if (strength>=100) {
			System.out.println(name+"吃不动了");
			this.strength = 100;
		}else {
			System.out.println(name+"正在吃,体力值加7");
			this.strength = strength+10;
		}
		//判断体力方法适合哪种状态
		//this.sleep();
	}
	//滚毛球
	public void fluffBall() {
		if (strength<=30) {
			System.out.println(name +"玩不动了,要吃饭");
		}else {
			System.out.println(name+"正在滚毛球,体力值减12,亲密度加7");
			this.strength = strength - 12;//玩一次消耗12点体力值
			this.intimacy = intimacy + 7; //增加7点亲密度
			if (intimacy>=100) {
				System.out.println("达成成就:【重度猫瘾患者】,亲密度已达上限");
				this.intimacy = 100;
			}
		}	
	}
	//睡觉
	public void sleep() {
		if (strength<=30) {
			System.out.println(name + "要吃饭");
		}else if (strength>30 && strength<=40) {
			System.out.println(name +"困了");
		}else if (strength>40 && strength<=70) {
			System.out.println(name +"正无所事事");
		}else {
			System.out.println(name +"想让你起来嗨");
		}
		
	}
	//查询猫猫当前状态方法
	public void state(Person person,Cat cat) {//其实传一个参也行 传两个是为了方便修改里面单个数据
		System.out.println(person.getName()+" 的小猫 "+person.getCat().getName()+" 当前的状态是---> "+" 体力值:"+person.getCat().getStrength()+" 亲密度:"+person.getCat().getIntimacy());
	}
}
//狗类
class Dog{
	private String name;
	private int strength;//体力值
	private int intimacy;//亲密度
	public Dog() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
//	public Dog(String name, int strength, int intimacy) {
//		super();
//		this.name = name;
//		this.strength = strength;
//		this.intimacy = intimacy;
//	}

//	public Dog(int strength, int intimacy) {
//		super();
//		this.strength = strength;
//		this.intimacy = intimacy;
//	}
	public int getStrength() {
		return strength;
	}
	//设置狗体力方法
	public void setStrength(int strength) {
		if (strength<0||strength >100) {
			System.out.println("修狗的体力值不能小于0且不能大于100");
			throw new IllegalArgumentException("invalid strength value");//体力值无效
		}else {
			this.strength = strength;
		}
	}
	public int getIntimacy() {
		return intimacy;
	}
	public void setIntimacy(int intimacy) {
		this.intimacy = intimacy;
	}
	//狗eat方法
	public void eat() {
		//每吃一次加7点体力
		if (strength>=100) {
			System.out.println(name+"吃不动了,体力值已满赶紧玩");
			this.strength = 100;
		}else {
			System.out.println(name+"正在吃,体力值加7");
			this.strength = strength+7;	
		}
		//判断体力方法适合哪种状态
		//this.sleep(); //还是单独调用吧
		
	}
	//接飞盘
	public void catchFrisbee() {
		if (strength<=30) {
			System.out.println(name +"玩不动了,要吃饭");
		}else {
			System.out.println(name+"正在接飞盘,体力值减10,亲密度加5");
			this.strength = strength - 10;//玩一次消耗10点体力值
			//体力值小于30玩游戏不会增加亲密度
			this.intimacy = intimacy + 5; //增加5点愉悦度
			if (intimacy>=100) {
				System.out.println("达成成就:【狗的好兄弟】,亲密度已达上限");
				this.intimacy = 100;
			}
		}
		
	}
	//睡觉
	public void sleep() {
		if (strength<=30) {
			System.out.println(name + "要吃饭");
		}else if (strength>30 && strength<=40) {
			System.out.println(name +"困了");
		}else if (strength>40 && strength<=70) {
			System.out.println(name +"正无所事事");
		}else {
			System.out.println(name +"想让你起来嗨");
		}
		
	}
	public void state(Person person,Dog dog) {
		System.out.println(person.getName()+" 的小狗 "+person.getDog().getName()+" 当前的状态是---> "+" 体力值:"+person.getDog().getStrength()+" 亲密度:"+person.getDog().getIntimacy());
	}
}
public class Test04 {

	public static void main(String[] args) {
		//实例化人类对象
		Person person = new Person("唐三少");
		
		//实例化猫猫对象
		Cat cat = new Cat();
		cat.setName("悠米");
		cat.setStrength(50);
		cat.setIntimacy(20);
		//人设置猫?
		person.setCat(cat);
		//查看猫猫状态
		//cat.state(person, cat);
		
		//实例化狗狗对象
		Dog dog = new Dog();
		dog.setName("旺财");
		dog.setStrength(60);
		dog.setIntimacy(40);
		//人设置狗?
		person.setDog(dog);
		//查看狗狗状态
		//dog.state(person, dog);
		
		//开始执行对狗的方法
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.play(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		person.feed(dog);
		dog.state(person, dog);
		dog.sleep();
		
		System.out.println("-----------------------------------------------------");
		//开始执行对猫的方法
		person.feed(cat);
		person.play(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.feed(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		person.play(cat);
		cat.state(person, cat);
		cat.sleep();
		
	}
}
//输出结果
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财吃不动了,体力值已满赶紧玩
旺财吃不动了,体力值已满赶紧玩
旺财吃不动了,体力值已满赶紧玩
旺财吃不动了,体力值已满赶紧玩
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
旺财正在接飞盘,体力值减10,亲密度加5
达成成就:【狗的好兄弟】,亲密度已达上限
旺财玩不动了,要吃饭
旺财玩不动了,要吃饭
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
旺财正在吃,体力值加7
唐三少 的小狗 旺财 当前的状态是--->  体力值:64 亲密度:100
旺财正无所事事
-----------------------------------------------------
悠米正在吃,体力值加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米吃不动了
悠米吃不动了
悠米吃不动了
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米玩不动了,要吃饭
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米正在吃,体力值加7
悠米吃不动了
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
悠米正在滚毛球,体力值减12,亲密度加7
达成成就:【重度猫瘾患者】,亲密度已达上限
悠米正在滚毛球,体力值减12,亲密度加7
达成成就:【重度猫瘾患者】,亲密度已达上限
悠米玩不动了,要吃饭
唐三少 的小猫 悠米 当前的状态是--->  体力值:28 亲密度:100
悠米要吃饭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值