文章目录
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());
}
}
紧紧围绕者一个点:赋值和取值 只是针对于属性 的