面向对象
面向对象
8.1 面向对象介绍
-
面向:拿、找
-
对象:能干活的东西
-
面向对象编程:拿东西过来做对应的事情
8.2 类和对象
-
类(设计图):是对象共同特征的描述
-
对象:是真实存在的具体东西
在java中,必须先设计类,才能获得对象。
8.2.1如何定义类
public class 类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器(后面学习)
4.代码块(后面学习)
5.内部类(后面学习)
}
//如何得到类的对象
// 类名 对象名 = new 类名();
// 例如:Phone p = new Phone();
如何得到类的对象
- 类名 对象名 = new 类名(); // 创建对象
- 例如:Phone p = new Phone();
如何使用对象
-
访问属性:对象名.成员变量
-
访问行为:对象名.方法名(…)
//创建 Phone类
public class Phone {
//属性(成员变量)
String brand;
double price;
// 行为(方法)
public void call(){
System.out.println("正在打电话");
}
public void playGame(){
System.out.println("正在打游戏");
}
}
public class PhoneTest {
public static void main(String[] args) {
//创建手机对象
Phone p =new Phone();
//给手机赋值
p.brand="小米";
p.price =1999.98;
//获取手机对象中的值
System.out.println(p.brand);
System.out.println(p.price);
//调用手机中的方法
p.call();
p.playGame();
Phone p2 = new Phone();
p2.brand="华为";
p2.price=8999;
p2.call();
p2.playGame();
}
}
定义类的补充事项
-
用来描述一类事物的类,专业叫
javaBean
类,在javabean
类中是不写main
方法的。 -
编写
main
的类叫做测试类。在可以测试类中创建javabean
类的对象并进行赋值调用。 -
类名首字母建议大写,要见名知意,驼峰命名(大骆驼),不能用关键字
-
一个java文件中可以定义多个
class
类,且只能一类是public
修饰,而且public
修饰的类名必须成为代码文件名。 -
实际开发中建议一个文件定义一个
class
类 -
成员变量的完整定义格式:修饰符 数据类型 变量名称 = 初始值;
一般无需指定初始值,存在默认值。
8.3 封装
- 封装可以让我们知道如何正确设计对象的属性和方法。
- 对象代表什么,就得封装对应的数据,并提供数据对应的行为。
//例如
//封装
//需求:定义一个类描述人
//属性:姓名,年龄
//行为:吃饭,睡觉
public class Preson {
String name;
int age;
public void eat(){
System.out.println("正在吃饭");
}
public void sleep(){
System.out.println("睡觉ing...");
}
}
8.4 private关键字
-
是一个权限修饰符
-
可以修饰成员(成员变量和成员方法)
-
被
private
修饰的成员只能在本类中才能访问
package code7_28;
public class GrilFriend {
// 属性
private String name;
private int age;
private String gender;
// 针对每一个私有化成员变量,都要提供get和set方法
// set方法:给成员变量赋值
// get方法:对外提供成员变量的值
// 作用:给成员变量name进行赋值,因为只是赋值接受数据所以只传形参 无返回值,没有返回值的数据类型写void即可
public void setName(String n) {
name = n;
}
// 作用:对外提供name的属性,对外提供数据 不接受数据 所以不传参数
public String getName() {
return name;
}
// setAge:给成员变量age进行赋值
public void setAge(int a) {
if (a >= 18 && a <= 26) {
age = a;
} else {
System.out.println("非法参数");
}
}
// getAge:对外提供成员变量age的值
public int getAge(){
return age;
}
// setGender:给成员变量gender进行赋值
public void setGender(String g) {
gender = g;
}
// getGender:对外提供成员变量gender的值
public String getGender() {
return gender;
}
public void eat() {
System.out.println("吃饭ing....");
}
public void sleep() {
System.out.println("睡觉...");
}
}
package code7_28;
public class GrilFriendTest {
public static void main(String[] args) {
// 创建对象
GrilFriend gf = new GrilFriend();
// 赋值
gf.setAge(18);
gf.setName("大聪明");
gf.setGender("女");
// String name = gf1.getName();
System.out.println(gf.getAge());
System.out.println(gf.getName());
System.out.println(gf.getGender());
gf.eat();
gf.sleep();
}
}
8.5 this关键字和就近原则
8.5.1成员变量和局部变量
public class GrilFriend {
private int age;//成员变量
public void method(){
int age = 10; // 局部变量
System.out.println(age);//输出局部变量10
System.out.println(this.age); // 输出成员变量
}
}
- 就近原则:离谁近就用谁
// 一
public class GrilFriend {
private int age;//成员变量
public void method(){
int age = 10; // 局部变量
System.out.println(age);// 离局部变量近,输出局部变量10
System.out.println(this.age); //加this后 输出成员变量0
}
}
// 二
public class GrilFriend {
private int age;//成员变量
public void method(){
//int age = 10; // 局部变量
System.out.println(age);// 离成员变量近 输出成员变量0
//System.out.println(this.age); //加this后 输出成员变量
}
}
public class GrilFriendTest {
public static void main(String[] args) {
GrilFriend gf1 = new GrilFriend();
gf1.method();// 一 输出10 0
// 二 输出 0
}
}
8.5.2 this关键字使用
-
this.xxx:表示使用的是成员变量xxx
-
this可以区分成员变量和局部变量
-
(调用成员变量时区分不同的对象)
package code7_28.demo1;
public class GrilFriend {
// 属性
private String name;
private int age;
private String gender;
// 针对每一个私有化成员变量,都要提供get和set方法
// set方法:给成员变量赋值
// get方法:对外提供成员变量的值
// 作用:给成员变量name进行赋值
public void setName(String name) {
// 等号右边 触发就近原则 name接收局部变量形参String name接受的值,
// 局部变量表示测试类中调用方法(setName方法)传递过来的数据(即"大聪明")
// 等号左边:表示成员位置的name,即使用的是成员变量
this.name = name;
}
// 作用:对外提供name的属性
public String getName() {
return name;
}
// setAge:给成员变量age进行赋值
public void setAge(int age) {
if (age >= 18 && age <= 26) {
this.age = age;
} else {
System.out.println("非法参数");
}
}
// getAge:对外提供成员变量age的值
public int getAge(){
return age;
}
// setGender:给成员变量gender进行赋值
public void setGender(String gender) {
this.gender = gender;
}
// getGender:对外提供成员变量gender的值
public String getGender() {
return gender;
}
public void eat() {
System.out.println("吃饭ing....");
}
public void sleep() {
System.out.println("睡觉...");
}
}
===========================================================
package code7_28.demo1;
public class GrilFriendTest {
public static void main(String[] args) {
// 创建对象
GrilFriend gf = new GrilFriend();
// 赋值
gf.setAge(18);
gf.setName("大聪明");
gf.setGender("女");
// String name = gf1.getName();
System.out.println(gf.getAge());//18
System.out.println(gf.getName());//大聪明
System.out.println(gf.getGender());//女
gf.eat();//吃饭ing...
gf.sleep();//睡觉...
}
}