JAVA中面向对象的思想
1.面向对象思想概述
-
将步骤与过程封装成方法
这样结构就清晰了很多。用的时候,找到对应的类并调用相应的方法就可以了。 这就是面向对象的思想。
-
面向对象思想特点
- 我们做好内部的工作,让对象去执行简单的指令就能达到目的
- 可以将复杂的事情简单化
- 将我们从执行者变成了指挥者
- 角色发生了转换
-
面向对象特征
- 封装(encapsulation):封装一个方法
- 继承(inheritance):调用类中的方法
- 多态(polymorphism)
2.类与对象概述
-
属性: 就是该事物的描述信息
-
行为: 就是该事物能够做什么
-
建立一个类作为一个抽象的概念
-
再建立对象作为一个具体的概念
-
由此我们就得到了现实中的事物和类的对应关系
事物 类
属性 ----------------- 成员变量
行为 ----------------- 成员方法 -
定义类其实就是定义类的成员(成员变量和成员方法)
- 成员变量和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
- 成员方法和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
-
类
public class person { String name ; int age ; char sex ; public void eat() { System.out.println("q"); } public void sleep() { System.out.println("w"); } public void playGame() { System.out.println("e"); } } 建立一个类,即一种抽象的概念,对象可以调用里边的方法
-
对象
public class teat { public static void main(String[] args) { person p2 = new person(); //设置成员变量的值 p2.name = "r"; p2.age = 15; p2.sex = 'd'; System.out.println(p2.name1); System.out.println(p2.age); System.out.println(p2.sex); p2.sleep(); p2.playGame(); p2.eat(); } }
3.面向对象——手机类
- 类
package org.Ko.demo2;
public class Phone {
String name = "小米";
double price = 799.0;
public void call(String phoneNumber) {
System.out.println("给" + phoneNumber + "打电话");
}
public void sendMsg(String name, String content) {
System.out.println("给" + name + "发的短信是" + content);
}
}
- 对象
package org.Ko.demo2;
public class MyTest {
public static void main(String[] args) {
Phone phone = new Phone();//定义一个新的对象
String name = phone.name;//调用初始值——小米
double price = phone.price;
System.out.println(name);
System.out.println(price);
phone.call("119");
phone.sendMsg("kl", "ss");
System.out.println("============================");
Phone phone1 = new Phone();
phone1.name = "华为";
phone1.price = 1000.5;
System.out.println(phone1.name);
System.out.println(phone1.price);
phone1.call("120");
phone1.sendMsg("df", "22");
}
}
4.成员变量和局部变量的区别
- 在类中的位置不同
- 成员变量:在类中方法外
- 局部变量:在方法定义中或者方法声明上
- 在内存中的位置不同
- 成员变量:在堆内存
- 局部变量:在栈内存
- 生命周期不同
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同
- 成员变量:有默认初始化值
- 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
5.匿名对象
-
什么是匿名对象
就是一种无名的对象 -
匿名对象应用场景
- 调用方法,仅仅只调用一次的时候。
- 匿名对象可以作为实际参数传递
-
实例演示
public class MyTest { public static void main(String[] args) { //每new一次都是一个新的对象。 //匿名对象,他可以调用属性和方法可以作为参数传递 //当你以后看到一个方法的形参要一个 类 类型,你就传一个该类的对象。 Phone phone1 = new Phone(); test(phone1, 5); System.out.println(phone1.price); //输出为5 //匿名对象,可以作为参数来传递, //每new一次都是一个新的对象。 test(new Phone(), 9); //这里的匿名对象为一个新对象,地址指向方法中的Phone p } public static void test(Phone p, double price) { p.price = price; System.out.println(p.price); //此时的price被传递过来的形参的量所覆盖了,原本为6.5,现在为9 } } class Phone { String name; double price = 6.5; public void call(String name) { System.out.println("给" + name + "打电话"); } }
6.封装
- 封装的引入
通过学生案例,给年龄赋值为负数引出数据问题。
然后通过private解决这个问题。最后说其实这就是封装。 - 封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 - 封装好处
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。 - 封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
7.private关键字
-
private
关键字特点- 是一个权限修饰符
- 可以修饰成员变量和成员方法
- 被其修饰的成员只能在本类中被访问
-
应用举例————类
package westos2.demo7; //定义一个类,私有掉成员变量 public class People{ private String name; private int age; //针对私有的成员变量,提供对应的 公共的 get set方法,让外界通过get set方法来访问私有成员变量 //setName 成员变量名的第一个字母大写。 public void setName(String MZ) { if(MZ>0&&MZ<=100){ name = MZ; }//加入一个判断条件,不让对象随意设置成员变量,这是private的主要作用 } public String getName() { return name; } public void setAge(int NL) { age = NL; } public int getAge() { return age; } public void sleep() { System.out.println("睡觉"); } }
-
应用举例————对象
public class MyTest { public static void main(String[] args) { People teacher = new People(); teacher.setName("刘"); teacher.setAge(39); String name = teacher.getName(); int age = teacher.getAge(); System.out.println(name); System.out.println(age); } }
8.this关键字
-
this
当局部变量和成员变量相同的时候 如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题
-
this关键字特点
- 是当前类的对象引用。
- 简单的记,它就代表当前类的一个对象。哪个对象调用这个方法,那么该方法的内部的this就代表哪个对象
-
this的应用场景
- 解决局部变量隐藏成员变量
-
应用举例————类
public class Dog { private String name; private int age; 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; } } 重名时使用this关键字
-
应用举例————对象
public class MyTest { public static void main(String[] args) { Dog dog = new Dog(); dog.setName("旺财"); dog.setAge(2); System.out.println(dog.getName()); System.out.println(dog.getAge()); } }