1.封装
Java 有三大特性: 封装 继承 多态
封装是面向对象的思想的特性
对属性进行封装 对方法进行封装 对类进行封装 对项目进行封装 属性的封装 String name;。只需要通过对象.属性 = 初始化值;进行赋值。这样存在一定的隐患
对属性进行封装:
1.对成员变量加修饰符 private
2.在类中书写 set和get方法进行对属性的赋值和取值
案例:人类
package com.baidu.a_fengzhuang;
//声明一个人类
public class Person1 {
private String name;
private int age;
//因为有private(私有)修饰,所以不能使用对象.属性进行赋值了。
//要通过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;
}
}
//因为有private(私有)修饰,所以不能使用对象.属性进行输出了。
//需要使用get方法进行取值。
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Demo1 {
public static void main(String[] args) {
//创建对象
Person1 person1 = new Person1() ;
//调用setName方法进行辅助
person1.setName("小明");
person1.setAge(18);
System.out.println(person1.getName() + ":" + person1.getAge());//小明:18
}
}
上方代码还有另外一种赋值方法
通过使用构造方法赋值
二者选一个即可
如下:Pandas类
案例:Pandas类
package com.baidu.a_fengzhuang;
//pandas2类
public class Pandas2 {
private String name;
private int age;
private double height;
//构造方法
public Pandas2(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
//取值
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getHeight() {
return height;
}
}
public class Demo2 {
public static void main(String[] args) {
Pandas2 pandas2 = new Pandas2("圆圆", 2, 0.80);
System.out.println(pandas2.getName());
System.out.println(pandas2.getAge());
System.out.println(pandas2.getHeight());
}
}
总结:
就是要对成员变量赋值和取值的
1.对实体类中的成员变量进行加private修饰
2.在实体类中 set方法进行赋值 get方法进行取值!!!
2.this关键字
字面意思:这个
1.写在类中,代表当前对象
可以使用this关键字调用属性和方法 this这个关键只能在方法(成员方法和构造方法)中使用。
2.this可以调用当前的构造方法(很少用的)
只能在构造方法中去调用构造方法 this()只能在构造方法中放在第一行
1.this可以调用属性,可以在构造方法中调用成员方法,可以在
成员方法中调用成员方法。2.this可以调用构造方法,有限制条件(这个用的很少)
一、必须是在构造方法中调用构造方法(比如:this在无参构造
方法中调用有参构造方法)
二、在调用时候,必须写在第一行3.this不能在成员方法中调用构造方法。
案例:this调用构造方法
package com.baidu.b_this;
class Person {
String name;
int age;
//无参构造
public Person() {
this("小明", 18);
}
//有参构造
public Person(String naem, int age) {
System.out.println("你调用了有参构造方法");
}
}
public class Demo1 {
public static void main(String[] args) {
//创建对象通过无参构造调用有参构造
Person person = new Person();
}
}
类对象可以作为一个方法的参数
案例:老师命令一个学生去敲代码
package com.baidu.a_fengzhuang;
//学生类
class Student {
String name;
//声明一个敲代码的方法
public void zuo() {
System.out.println(name +"敲代码");
}
}
//老师类
class Teacher {
String name;
//把学生对象当做参数进行传参
public void banzhang(Student stu) {
stu.zuo();
}
}
public class Demo3 {
public static void main(String[] args) {
Teacher teacher = new Teacher();
Student student = new Student();
student.name = "小明";
teacher.banzhang(student);
}
}
多类合作
一个类对象可以当成另外一个类的成员变量
package com.baidu.c_moreclass;
class Person {
String name;
//猫对象作为Person类成员变量
Cat cat;
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;
}
}
class Cat {
String cat_name;
int cat_age;
public String getCat_name() {
return cat_name;
}
public void setCat_name(String cat_name) {
this.cat_name = cat_name;
}
public int getCat_age() {
return cat_age;
}
public void setCat_age(int cat_age) {
this.cat_age = cat_age;
}
}
public class Demo1 {
public static void main(String[] args) {
Person person1 = new Person();
Cat cat1 = new Cat();
cat1.setCat_name("狸猫");
cat1.setCat_age(2);
person1.setName("小明");
person1.setCat(cat1);
//这个输出是通过猫对象访问的名字
System.out.println(cat1.getCat_name());
//这个输出是通过人对象下面的成员变量猫,进而调用猫的名字
System.out.println(person1.getCat().cat_name);
//两次输出结果一样都为狸猫
}
}