java学习--day9 (封装)

文章目录

day8作业

1.声明一个类的语法格式
	实体类
	class 类名 {
		String name;
		int age;
		double weight;
		char sex;
		
		public void eat () {
			sout("中午吃饭");
		}
	}
2.通过类创建一个对象
	类名 对象名字 = new 类名();
	
3.无参数的构造方法语法格式
	public 类名 () {}
	
4.有参数构造方法的语法格式
	public 类名 (参数) {
	
	}
5.构造方法的作用是啥
	构造方法初始化对象的
6.在类中声明方法的语法格式是什么
	public void 方法名字 () {}
7.冒泡排序

8.构造代码块执行  比构造方法先执行
9成员变量和局部变量

今天的内容

1.封装

2.this关键字

3.类对象可以作为一个方法的参数

4.多类合作

1.封装

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

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

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

​ 今天主要讲属性的封装。

​ 写过类,类下m面的成员变量

​ String name;。只需要通过对象.属性 = 初始化值;进行赋值。这样存在一定的隐患

对属性进行封装:

​ 1.对成员变量加修饰符 private

​ 2.在类中书写 set和get方法进行对属性的赋值和取值

java 复制代码
package com.qfedu.b_fengzhuang;

class Pig {
	private String name;
	private int age;
	
	//依靠set方法进行赋值了  赋值是没有返回值的
	public void setName (String name) {
		this.name = name;
	}
	//有规律  在赋值的时候 set变量名字  小驼峰的命名规则
	public void setAge (int age) {
		//可以控制变量值的范围 大小
		if (age < 0 || age > 100) {
			this.age = 0;
		} else {
			this.age = age;
		}
		
	}
	//书写get方法
	public String getName() {
		return name;
	}
	public int getAge () {
		return age;
	}
}
public class Demo3 {
	public static void main(String[] args) {
		Pig pig = new Pig();
		pig.setName("猪刚鬣");
		pig.setAge(-90);
		System.out.println(pig.getName() + ":" + pig.getAge());
		
	}

}

练习:

声明一个Cat类,属性 name age sex weight 必须是private修饰的

对属性进行赋值和取值

java 复制代码
package com.qfedu.b_fengzhuang;

class Cat {
	private String name;
	private int age;
	private char sex;
	private double weight;
	
	public Cat(String name, int age, char sex, double weight) {
	
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.weight = weight;
	}
	public void setName (String name) {
		this.name = name;
	}
	public String getName () {
		return name;
	}
	public void setAge (int age) {
		this.age = age;
	}
	public int getAge () {
		return age;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public char getSex() {
		return sex;
	}
	public void setWeight (double weight) {
		this.weight = weight;
	}
	public double getWeight () {
		return weight;
	}
}
public class Demo4 {
	public static void main(String[] args) {
		//要么使用set方法进行赋值,要么使用构造方法进行赋值。
		//这两个选择一个即可
		Cat cat1 = new Cat("Jerry", 7, '公', 9);
		
		System.out.println(cat1.getName() + cat1.getSex() + cat1.getAge() + cat1.getWeight());
		
		
	}

}

案例:

​ 一个Pandas类,属性 name age weight height 要求私有话成员变量 书写set方法

和get方法,对成员变量进行赋值和取值

java 复制代码
package com.qfedu.b_fengzhuang;

class Pandas {
	private String name;
	private int age;
	private double height;
	private double weight;
	//快捷键:  右键-》source-》generater getter and setter 全选属性即可
	//就是取值
	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 getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	
	
}
public class Demo5 {
	public static void main(String[] args) {
		Pandas pandas = new Pandas();
		pandas.setName("圆圆");
		pandas.setAge(8);
		pandas.setHeight(1.2);
		pandas.setWeight(100.3);
		System.out.println(pandas.getName() + ":" + pandas.getAge() + ":" + pandas.getHeight() + ":" + pandas.getWeight()) ;
		
	}

}

总结:

就是要对成员变量就赋值和取值的
1.对实体类中的成员变量进行加private修饰
2.在实体类中 set方法进行赋值  get方法进行取值!!!

2.this关键字

字面意思:这个

​ 1.写在类中,代表当前对象

​ 可以使用this关键字调用属性和方法

​ this这个关键只能在方法(成员方法和构造方法)中使用。

​ 2.this可以调用当前的构造方法(很少用的)

​ 1.只能在构造方法中去调用构造方法

​ 2.this()只能在构造方法中放在第一行

java 复制代码
package com.qfedu.b_fengzhuang;

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.封装
	对属性的封装
	1.对成员变量加修饰符  private  JavaBean规范
	2.在实体类中写set方法和get方法  为啥要写set方法和get方法
		咱们要对属性进行赋值。加上private之后 对象.变量 不能这样来操作了
		只能通过set方法进行赋值。通过get方法进行取值
		
		有快捷键
		
2.this关键字
	这个 代表的是当前对象
	1.可以调用成员变量  可以调用成员方法
	2.可以调用构造方法

关于this关键字注意事项:

​ 1.调用成员变量。在构造方法,在成员方法。

​ 2.调用成员方法。在构造方法,在成员方法。

java 复制代码
package com.qfedu.c_this;

class Person {
	String name;
	int age;
	
	//验证第一个  this关键字可以在构造方法中调用成员变量
	public Person () {
		this.eat();
		this.name = "狗蛋";
	}
	//验证第二个 this关键在成员方法中调用成员变量
	public void eat () {
		//在方法中可以使用this.变量  
		this.name = "老邢";
		System.out.println(name + "在吃饭");
		this.test();
	}
	public void test () {
		System.out.println("细细打");
	}
	
}
public class Demo1 {
	public static void main(String[] args) {
		Person person = new Person ();
		System.out.println(person.name);
		//person.eat();
	}

}

注意事项:这个用的很少!!!

​ this()。可以调用构造方法。只能在构造方法中调用构造方法,只能写在第一行

​ 能不能在成员方法中调用构造方法?不能!!!

java 复制代码
package com.qfedu.c_this;

class Dog {
	String name;
	int age;
	public Dog() {
		System.out.println("123");
		//this("styb", 8);
	}
	public Dog(String name, int age) {
		this();
		System.out.println("有参构造");
	}
	
	
	
}
public class Demo2 {
	public static void main(String[] args) {
		//需求:实例化对象dog  要求将有参构造这四个字打印出来
		Dog dog = new Dog("goudan", 12);
		//Dog dog = new Dog();
	}

}

3.类对象可以作为一个方法的参数

方法的参数可以是八大基本数据类型,String,数组

类对象也是可以的

老师来让学生敲代码

java 复制代码
package com.qfedu.d_args;

class Teacher {
	//command的参数是一个类对象
	public void command (Student stu) {
		stu.coding();
	}
}
class Student {
	String name;
	public void coding () {
		System.out.println(name + "敲代码");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		Student student = new Student();
		student.name = "骚磊";
		Teacher teacher = new Teacher();
		//在teacher方法中去调用student对象的一个方法
		//最终打印的结果是 student类下面的方法
		teacher.command(student);
	}

}

人喂狗,狗在吃

java 复制代码
package com.qfedu.d_args;

class Person {
	public void feed (Dog dog) {
		dog.eat();
	}
}
class Dog {
	public void eat () {
		System.out.println("狗在吃饭");//牛彩云
	}
}
public class Demo2 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		Person person = new Person();
		person.feed(dog);
	}

}

4.多类合作【重点】

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

人类

​ 属性: 姓名 性别 猫

java 复制代码
package com.qfedu.e_moreclass;

class Person1 {
	private String name;
	private Cat1 cat1;//一个类对象可以作为另外一个类的属性来使用
	//碰到private修饰的属性有set和get的想法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Cat1 getCat1() {
		return cat1;
	}
	public void setCat1(Cat1 cat1) {
		this.cat1 = cat1;
	}
	
}
class Cat1 {
	private String name;
	private char sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	
	
}
public class Demo2 {
	public static void main(String[] args) {
		//要对Person1对象的属性进行赋值
		Person1 person1 = new Person1();
		person1.setName("老万");
		Cat1 cat1 = new Cat1();
		cat1.setName("小万");
		cat1.setSex('母');
		person1.setCat1(cat1);
		//取值
		//通过 人取猫的值
		System.out.println(person1.getName());//获取人的名字
		System.out.println(person1.getCat1());//获取猫对象
		System.out.println(person1.getCat1().getName());//获取猫的名字
		System.out.println(person1.getCat1().getSex());
	}

}

紧紧围绕者一个点:赋值和取值 只是针对于属性 的

相关推荐
J不A秃V头A17 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡19 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
小池先生31 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb34 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng37 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随1 小时前
Redis内存碎片详解
java·开发语言
brrdg_sefg1 小时前
gitlab代码推送
java
hanbarger1 小时前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
苹果醋32 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx