面向对象学习内容

1 什么是面向对象
1.1 对象

1.2 面向对象

2 类和对象
1.1 类和对象定义




1.2 类和对象练习

1.2.1 面向对象表示狗狗
ooptest1.Dog
java
package com.itstudy.ooptest1;
/*
1.利用面向对象思想表示狗狗(属性:名字,年龄,体重,毛发颜色)
*/
public class Dog {
String name; //名字
int age; //年龄
double weight; //体重
String color; //毛发颜色
}
// 3.课堂作业:利用面向对象思想表示手机(属性:品牌,颜色,价格)
ooptest1.Test
java
package com.itstudy.ooptest1;
public class Test {
public static void main(String[] args) {
//第一只狗信息管理
Dog d1= new Dog();
d1.name="旺财";
d1.age=1;
d1.weight=10;
d1.color="黄色";
System.out.println(d1.name);
System.out.println(d1.age);
System.out.println(d1.weight);
System.out.println(d1.color);
System.out.println("-----------------");
//第二只狗信息管理
Dog d2= new Dog();
d2.name="饺子";
d2.age=2;
d2.weight=12;
d2.color="白色";
System.out.println(d2.name);
System.out.println(d2.age);
System.out.println(d2.weight);
System.out.println(d2.color);
System.out.println("-----------------");
//第三只狗信息管理
Dog d3= new Dog();
d3.name="小黑";
d3.age=3;
d3.weight=14;
d3.color="黄色";
System.out.println(d3.name);
System.out.println(d3.age);
System.out.println(d3.weight);
System.out.println(d3.color);
}
}
1.2.2 面向对象表示学生
ooptest2.Student
java
package com.itstudy.opptest2;
// 2.利用面向对象思想表示学生(属性:名字,性别,年龄,身高)
public class Student {
String name;//名字
String sex;//性别
int age;//年龄
double height;//身高
}
ooptest2.Test
java
package com.itstudy.opptest2;
public class Test {
public static void main(String[] args) {
// 创建对象记录第一个学生信息管理
Student s1 = new Student();
s1.name = "张三";
s1.sex = "男";
s1.age = 18;
s1.height = 1.8;
// 输出第一个学生信息
System.out.println(s1.name);
System.out.println(s1.sex);
System.out.println(s1.age);
System.out.println(s1.height);
System.out.println("-----------------");
//第二个学生信息管理
Student s2 = new Student();
s2.name = "李四";
s2.sex = "男";
s2.age = 19;
s2.height = 1.9;
System.out.println(s2.name);
System.out.println(s2.sex);
System.out.println(s2.age);
System.out.println(s2.height);
System.out.println("-----------------");
//第三个学生信息管理
Student s3 = new Student();
s3.name = "王五";
s3.sex = "男";
s3.age = 20;
s3.height = 2.0;
System.out.println(s3.name);
System.out.println(s3.sex);
System.out.println(s3.age);
System.out.println(s3.height);
}
}
1.2.3 面向对象表示手机
ooptest3.Phone
java
package com.itstudy.opptest3;
// 3.课堂作业:利用面向对象思想表示手机(属性:品牌,颜色,价格)
public class Phone {
String brand;
String color;
double price;
}
ooptest3.Test
java
package com.itstudy.opptest3;
public class test {
public static void main(String[] args) {
//第一个手机信息管理
Phone p1 = new Phone();
p1.brand = "小米";
p1.color = "黄色";
p1.price = 1000;
System.out.println(p1.brand);
System.out.println(p1.color);
System.out.println(p1.price);
System.out.println("-----------------");
//第二个手机信息管理
Phone p2 = new Phone();
p2.brand = "华为";
p2.color = "白色";
p2.price = 2000;
System.out.println(p2.brand);
System.out.println(p2.color);
System.out.println(p2.price);
System.out.println("-----------------");
//第三个手机信息管理
Phone p3 = new Phone();
p3.brand = "oppo";
p3.color = "黄色";
p3.price = 3000;
System.out.println(p3.brand);
System.out.println(p3.color);
System.out.println(p3.price);
}
}
1.3 面向对象的小细节
1.3.1 小细节描述


1.3.2 属性、行为练习
例:面向对象思想表示老师
ooptest4.Teacher
java
package com.itstudy.ooptest4;
// 利用面向对象思想表示教师(属性:名字,年龄 行为:授课,吃饭,睡觉)
public class Teacher {
// 属性:名字,年龄
String name;//名字
int age;//年龄
// 行为:授课,吃饭,睡觉
public void teach(){
System.out.println("我正在授课");
}
public void eat(){
System.out.println("我正在吃饭");
}
public void sleep(){
System.out.println("我正在睡觉");
}
}
ooptest4.Test
java
package com.itstudy.ooptest4;
public class Test {
public static void main(String[] args) {
// 创建对象记录第一个教师信息管理
Teacher t1 = new Teacher();
t1.name = "张三";
t1.age = 30;
t1.teach();
t1.eat();
t1.sleep();
System.out.println("-----------------");
Teacher t2 = new Teacher();
t2.name = "<UNK>";
t2.age = 35;
t2.teach();
t2.eat();
t2.sleep();
}
}
3 面向对象中的数据安全问题

3.1 private关键字

3.2 get/set方法

3.3 练习--小狗

ooptest5.Dog
java
package com.itstudy.opptest5;
public class Dog {
// 属性:姓名、年龄
private String name;//姓名
private int age;//年龄
//set/get方法
// 方法:设置姓名 set方法
//value:表示将来要赋的值 (小白)
public void setName(String value){
//给对象中的属性进行赋值
name=value;
}
// 方法:获取姓名 get方法
public String getName(){
return name;
}
// 方法:设置年龄 set方法
public void setAge(int num){
//给对象中的属性进行赋值
if(num >= 0 && num <= 15){
this.age = num;
} else{
System.out.println("当前的" + num + "不在合理范围");
}
}
// 方法:获取年龄 get方法
public int getAge(){
return age;
}
// 行为:吃骨头
public void eat(){
System.out.println(age + "岁的" + name + ",正在吃骨头" );
}
}
ooptest5.Test
java
package com.itstudy.opptest5;
public class Test {
public static void main(String[] args) {
/* 练习 面向对象练习:小狗
需求内容
小狗有属性:姓名、年龄。
行为:吃骨头
实现以下需求
要求 1:小狗的年龄:0 ~ 15 岁
要求 2:打印小狗所有的信息:小白,2 岁
要求 3:调用吃骨头的方法打印效果:2 岁的小白,正在吃骨头
*/
Dog d1 = new Dog();
d1.setAge(2); //赋值
d1.setName("小白"); //赋值
System.out.println(d1.getName() + "," + d1.getAge() + " 岁"); //获取值
d1.eat(); //调用行为方法
}
}
3.4 总结
3.5 课堂巩固
练习--学生信息

ooptest6.Student
java
package com.itstudy.ooptest6;
/*
在校学生有属性:姓名、年龄、身高、体重。
行为:学习。
实现以下需求
要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息
* */
public class Student {
//属性
private String name;//姓名
private int age;//年龄
private int height;//身高
private int weight;//体重
//get/set方法
//姓名
public void setName(String value) {
name=value;
}
public String getName() {
return name;
}
//年龄
public void setAge(int value) {
age=value;
}
public int getAge() {
return age;
}
//身高
public void setHeight(int value) {
height=value;
}
public int getHeight() {
return height;
}
//体重
public void setWeight(int value) {
weight=value;
}
public int getWeight() {
return weight;
}
//行为 学习
public void learn() {
System.out.println("努力学习。");
}
}
ooptest6.Test
java
package com.itstudy.ooptest6;
public class Test {
public static void main(String[] args) {
/*
在校学生有属性:姓名、年龄、身高、体重。
行为:学习。
实现以下需求
要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息
* */
Student s1=new Student();
/*要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息 */
// 要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
// 隐藏逻辑:年龄每年增加+1
s1.setName("张三");
s1.setAge(18);
s1.setHeight(183);
s1.setWeight(60);
System.out.print("大一新生,"+s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg,刚进大学");
s1.learn();
// 要求 2:大二期间张三体重增加了 10kg
s1.setAge(s1.getAge()+1);
int newWeight=s1.getWeight()+10;
s1.setWeight(newWeight);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
// 要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
s1.setAge(s1.getAge()+1);
int newHeight=s1.getHeight()+2;
s1.setHeight(newHeight);
newWeight=s1.getWeight()-3;
s1.setWeight(newWeight);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
// 要求 4:打印毕业之后,张三的所有信息
//刚上大四的年龄
s1.setAge(s1.getAge()+1);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
//大四毕业以后的年龄
s1.setAge(s1.getAge()+1);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
}
}
4 this关键字
4.1 this关键字
4.1.1 变量区分

4.1.2 this关键字使用

4.2 练习
4.2.1 练习1 --看代码,说结果

输出为:
10
0
this.变量名使用的是成员变量
当不用this关键字时,遵循的是就近原则
ooptest7.Student
java
package com.itstudy.ooptest7;
public class Student {
private int age;
public void setAge() {
int age=10;
System.out.println(age);
System.out.println(this.age);
}
}
ooptest7.Test
java
package com.itstudy.ooptest7;
public class Test {
public static void main(String[] args) {
Student s=new Student();
s.setAge();
}
}
4.2.2 练习2 --代码改进
ooptest8.Student --改进
java
package com.itstudy.ooptest8;
/*
在校学生有属性:姓名、年龄、身高、体重。
行为:学习。
实现以下需求
要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息
* */
public class Student {
//属性
private String name;//姓名
private int age;//年龄
private int height;//身高
private int weight;//体重
//get/set方法
//姓名
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 setHeight(int height) {
this.height=height;
}
public int getHeight() {
return height;
}
//体重
public void setWeight(int weight) {
this.weight=weight;
}
public int getWeight() {
return weight;
}
//行为 学习
public void learn() {
System.out.println("努力学习。");
}
}
ooptest8.Test --没变
java
package com.itstudy.ooptest8;
public class Test {
public static void main(String[] args) {
/*
在校学生有属性:姓名、年龄、身高、体重。
行为:学习。
实现以下需求
要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息
* */
Student s1=new Student();
/*要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
要求 2:大二期间张三体重增加了 10kg
要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
要求 4:打印大学毕业之后,张三的所有信息 */
// 要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
// 隐藏逻辑:年龄每年增加+1
s1.setName("张三");
s1.setAge(18);
s1.setHeight(183);
s1.setWeight(60);
System.out.print("大一新生,"+s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg,刚进大学");
s1.learn();
// 要求 2:大二期间张三体重增加了 10kg
s1.setAge(s1.getAge()+1);
int newWeight=s1.getWeight()+10;
s1.setWeight(newWeight);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
// 要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
s1.setAge(s1.getAge()+1);
int newHeight=s1.getHeight()+2;
s1.setHeight(newHeight);
newWeight=s1.getWeight()-3;
s1.setWeight(newWeight);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
// 要求 4:打印毕业之后,张三的所有信息
//刚上大四的年龄
s1.setAge(s1.getAge()+1);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
//大四毕业以后的年龄
s1.setAge(s1.getAge()+1);
System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
}
}
4.3 总结

5 构造方法
5.1 构造方法的定义

5.2 构造方法的格式

5.3 构造方法的使用
5.3.1 特点与执行时机

5.3.2 练习

ooptest9 Student
java
package com.itstudy.ooptest9;
public class Student {
//属性:姓名、年龄、性别、身高
private String name;//姓名
private int age;//年龄
private String sex;//性别
private int height;//身高
//空参构造方法
public Student() {
}
//带全部参数的构造方法
public Student(String name, int age, String sex, int height) {
this.name=name;
this.age=age;
this.sex=sex;
this.height=height;
}
//get/set方法
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
ooptest9 Test
java
package com.itstudy.ooptest9;
public class Test {
public static void main(String[] args) {
/* 学生信息
定义一个 JavaBean 类描述学生
属性:姓名、年龄、性别、身高*/
//创建对象
Student s1=new Student();
System.out.println(s1.getName());
System.out.println(s1.getAge());
System.out.println(s1.getSex());
System.out.println(s1.getHeight());
Student s2=new Student("张三",18,"男",183);
System.out.println(s2.getName());
System.out.println(s2.getAge());
System.out.println(s2.getSex());
System.out.println(s2.getHeight());
}
}
输出结果为:
null
0
null
0
张三
18
男
183
5.4 构造方法注意事项

6 章节总结
6.1 面向对象总结

6.2 练习
6.2.1 构造方法生成快捷键
6.2.2 get/set方法快捷键

6.2.3 练习代码
ooptest10 Student
java
package com.itstudy.ooptest10;
public class Student {
//属性:姓名 年龄
// 行为:学习,吃饭,睡觉
private String name;
private int age;
//构造方法快捷键 alt+(Fn)+insert
// Constructor 构造方法
// 空参构造,可以选择Select None 或者 两次Tab+Enter
public Student() {
}
//带全部参数的构造方法 全选回车
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//get/set方法快捷键 alt+(Fn)+insert
// Getters and Setters
//全选回车
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 void study(){
System.out.println(name+"正在学习");
}
public void eat(){
System.out.println(name+"正在吃饭");
}
public void sleep() {
System.out.println(name + "正在睡觉");
}
}
ooptest10 Test
java
package com.itstudy.ooptest10;
public class Test {
public static void main(String[] args) {
/* 练习 Javabean 类的练习:学生类
定义一个 Javabean 类描述学生:
属性:姓名 年龄
行为:学习,吃饭,睡觉*/
//创建对象 空参构造方法
Student s1=new Student();
s1.setName("张三");
s1.setAge(18);
System.out.println(s1.getName());
System.out.println(s1.getAge());
//调用行为方法
s1.study();
s1.eat();
s1.sleep();
//创建对象 带全部参数的构造方法
Student s2=new Student("李四",20);
System.out.println(s2.getName());
System.out.println(s2.getAge());
s2.study();
s2.eat();
s2.sleep();
}
}