面向对象
学习java要有面向对象的思维,学习C语言一般用的是面向过程,面向过程开发就是要实现一个功能,需要把功能的每一个步骤和过程一步一步用程序实现了。
面向对象:当我们需求少的时候,我们一步一步去操作很快,但是随着功能的增多,发现需要面对每一个步骤很麻烦,这时我们就可以,把这些步骤和功能进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起,这样结构比较清晰,用的时候,找到对应的类就可以了,这就是面向对象的思想。
面向对象的思想特点:
a:是一种更符合我们思想习惯的思想
b:可以将复杂的事情简单化
c:将我们从执行者变成了指挥者,角色发生了转换,不断的创建对象,使用对象,指挥对象做事情。
面向对象的特征:
封装(encapsulation):是类和对象概念的主要特性,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承(inheritance):它可以实现有类的所有功能,并且在无需重新编写原来的类的情况下对这些功能进行扩展。
多态(polymorphism):是允许你将父对象设置成为一个或更多的 他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作。
面向对象的三个特征先是了解,后面会详细的学习。
类和对象
类:是一组相关的属性和行为的集合,比如我们定义一个学生:
属性:姓名 ,年龄,性别,地址。对应的是成员变量
行为:吃饭,睡觉,学习,写作业。对应的是成员方法
成员变量:和以前定义变量是一样的,只不过位置发生了改变,在类中,在方法外。
成员方法:和以前定义方法是一样的,只不过把static去掉。
对象:是该类事物的具体表现。
举例:
类 学生
对象 班长就是一个对象
例如:手机类的定义
public class Phone {
String name = "小米";
double price = 1000;
String color = "白色";
public void call(String name) {
System.out.println("给" + name + "打电话");
}
public void sendMsg(String name, String content) {
System.out.println("给" + name + "发短信,内容是" + content);
}
定义了三个成员变量(手机的名字,手机的价格,手机的颜色)两个成员方法,也就是手机的功能,打电话,发短信。
如何创建对象
类名 对象名=new 类名();
使用成员变量: 对象名.变量名
使用成员方法: 对象名.方法名(…)
例如:手机对象的创建
public class MyTest2 {
public static void main(String[] args) {
Phone phone = new Phone();
String name = phone.name;
double price = phone.price;
String color = phone.color;
System.out.println(name);
System.out.println(price);
System.out.println(color);
phone.call("杜兰特");
phone.sendMsg("杜兰特","你打篮球打的很好");
}
}
三个引用,有两个对象指向同一个地址,内存图
成员变量和局部变量的区别
成员变量:在类中方法外,在堆内存,随着对象的创建而存在,随着对象的消失而消失,有默认初始化值。
局部变量:在方法中或者方法声明上(形参),在栈内存,随着方法的调用而存在,随着方法的调用完毕而消失。
注意:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则
匿名对象的概述和使用
匿名对象:没有引用数据类型变量指向的对象称作为匿名对象,
new Student();//匿名对象//名字是类名
Student st=new Student();//对比引用数据类型指向
注意:两个匿名对象不可能是同一个对象,
2.不会给匿名对象赋予属性值,因为无法获取到属性值
3.匿名对象主要是调用方法
匿名对象的应用场景:调用一个对象的方法一次后不再使用。
2.作为实参传递,调用方法使用
封装的概述
隐藏事物的实现细节,对外提供公共的访问方式。
封装的好处:隐藏实现细节,提供公共的访问方式,提高代码的复用性,提供安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性隐藏,提供公共方法对其访问。
private关键字的使用
private 的特点:是一个权限修饰符,可以修饰成员变量和成员方法,被其修饰的成员只能在本类中被访问。
例如:
public class Person {
private String name;
private int age;
public void setAge( int nianling){
if(nianling>0&&nianling<=100){
age=nianling;}
else{
System.out.println("输入不合理");
}
}
public int getAge(){
return age;
}
public void setName(String mingzi){
name=mingzi;
}
public String getName(){
return name;
}
}
public class Mytest {
public static void main(String[] args) {
Person person = new Person();
// person.age=23; 不能直接访问了
person.setAge(101);
int age = person.getAge();
person.setName("王五");
String name = person.getName();
System.out.println(name);
System.out.println(age);
}
}
通过set方法,来给成员变量设置值,通过get方法来获取值
this关键字的使用
当我们的局部变量和成员变量相同的时候,如果我们不使用关键字this,那么就会导致局部变量隐藏了成员变量。
this关键字的特点:是当前类的对象引用,谁调用这个方法,那么该方法的内部的this就代表谁。
例如:
public class Teacher {
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
public class Mytest1 {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.setName("lisi");
teacher.setAge(20);
String name = teacher.getName();
int age = teacher.getAge();
System.out.println(name);
System.out.println(age);
}
}
如果没有关键字this,成员变量就会和局部变量重名,就会输出 null 和this