类和对象
一、对象(万物皆可对象)
1、对象的划分
①静态部分
② 动态部分
2、计算机世界中的对象
① 面向对象的程序的设计思想就是要以对象思考问题
- 首先对现实世界的实体抽象为对象
- 考虑对象的属性和行为
②从一个问题中抽象出对象,这里抽象出的对象是大雁
③识别对象的静态属性:对象具有的属性都是静态属性
④识别对象的动态属性
⑤将以上分装起来也就是大雁类:类的实质就是封装对象的属性和行为的载体,而对象是类抽象出来的一个实例
二、类(同一类事务的统称)
1、类的理解
- 简单来说,将现实世界的一个事务抽象成对象,类就是这类对象的统称
2、注意
- 类是封装属性和行为的载体,反过来说就是具有相同的属性和行为的一类实体被称为类
三、封装、继承、多太
1、封装
①封装性
-
是面向对象的核心思想(例如即使知道计算机工作原理,使用时也不完全依赖于计算机工作原理这些细节)
-
保证类内部数据结构的完整性
②继承性
③多态性
2、继承(子承父业)
①当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时拿来**复用**
②优点:
- 继承思想可以缩短开发的周期
- 复用定义好的类可以提高系统性能
- 减少了系统在使用过程中出现错误的概率
③继承主要利用特定对象间的公有属性
3、多态
①多态的概念:父类对象应用于子类对象的特征就是多态
②多态的思想:对于图形类说明多态,每个图都有绘制自己的能力,这个能力看做是该类具有的行为,如果将子类看做父类的实力对象,这样当绘制图像时,简单地调用父类的也就是图形类绘制图形的方法即可绘制任何图形。
③多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类及相关
④Java中抽象类不能实例化对象,在多态机制中,父类会经常被定义为抽象类,在抽象类中给出一个方法的标准,不给出具体实现的流程
⑤在多态机制中,比抽象类更方便的方法就是将抽象类定义为借口
抽象方法组成的集合就是接口
例如:不同的五金店买类螺丝帽和螺丝钉,螺丝帽很轻松就可以拧在螺丝钉上,可螺丝帽和螺丝钉的厂家不同,但是这两个物件可以轻松的组合在一起,因为生产这两个组件的两个厂家遵循一个制造标准,这种标准在Java中就是接口
四、类(封装对象的属性和行为的载体)
1、成员变量
①对象的属性也称之为成员变量
-
创建book类,在类中设置一个成员变量name
public class Book { private String name; //定义一个String类型的成员变量 , 用private定义私有成员 int id =0; // 定义一个int类型的成员变量id并赋初值0 public String getName(){ // 定义一个getName()方法 setName("java"); //调用类中的其他方法 System.out.println(id+this.name); return id + this.name; //设置方法返回值 } private void setName(String name){ //定义一个setName()方法 this.name = name; // 将参数的值赋给类中的成员变量 } public Book getBook(){ return this; //返回Book类引用 } public static void main(String[] args){ Book book = new Book(); //创建一个对象 book.id=20; //将成员变量id赋值20 book.getName(); //使用对象调用成员方法 } }
2、成员方法
①定义成员方法的语法
权限修饰符 返回值类型 方法名(参数类型 参数名){
方法体;
return 返回值;
}
成员方法可以有参数,参数可以是对象,也可以是基本数据类型的变量
注意:
Java中的成员方法无返回值时,用void关键字表示
② 成员方法的返回值:
- 计算结果
- 数值和对象
- 返回值类型与方法返回值类型相同
一个方法中成员变量和局部变量同名时:局部>成员
类成员:成员变量和成员方法
3、权限修饰符
类修饰符 | |||
---|---|---|---|
private | protected | public | |
本类 | √ | √ | √ |
同包其他类或者子类 | × | √ | √ |
其他包的类和子类 | × | × | √ |
4、局部变量
①就是在成员方法中定义的变量称为局部变量
public String getName(){
int id = 0;
setName("python");
return id + this.name;
}
②局部变量的有效范围
-
局部变量的有效范围称为变量的作用域
-
局部变量的有效范围:变量的声明开始到该变量结束
public void doString(String name){ int id = 0; for(int i=0;i<10;i++){ System.out.pringtln(name+String.valueof(i)); } }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koSwmlrc-1663508449688)(C:\Users\ll\AppData\Roaming\Typora\typora-user-images\1663505354264.png)]
-
两个互不嵌套的作用域中可以声明两个名称和类型都相同的变量
public void doString(String name){ int id = 0; for(int i=0;i<10;i++){ System.out.pringtln(name+String.valueof(i)); } for(int i=0;i<22;i++){ System.out.println(i); } }
-
在嵌套区域中不可定义相同名称和类型的局部变量
5、this关键字
private void setName(String name){ //定义一个setName()方法
this.name = name; // 将参数的值赋给类中的成员变量
}
- Java中使用this关键字代表本类对象的引用
- 程序中this.name = name,this.name指的就是Book类中的成员变量name,第二name是形参setName()成员方法实现的就是将形参name的值赋值给成员变量
- 也可以作为方法的返回值,直接在方法中使用return this,返回该类的引用
private void setName(String name){ //定义一个setName()方法
this.name = name; // 将参数的值赋给类中的成员变量
}
- Java中使用this关键字代表本类对象的引用
- 程序中this.name = name,this.name指的就是Book类中的成员变量name,第二name是形参setName()成员方法实现的就是将形参name的值赋值给成员变量
- 也可以作为方法的返回值,直接在方法中使用return this,返回该类的引用