什么是面向对象
Java语言是一个纯面向对象的语言,面向对象的语言不仅只有Java,包括C++,PHP等
面向对象的编程思想简称 OOP(Object Oriented Programming),其基本特点就是封装,继承和多态。
面向过程与面向对象
想要弄清楚什么是面向对象,首先需要知道两者的区别
面向过程更注重程序的每一个步骤,用相应的函数来实现。
比如说,五子棋,面向过程就需要首先分析每一个步骤
1.实现游戏的开始
3.棋盘的搭建
4.玩家下棋,并打印新的棋盘
5.电脑下棋,并打印新的棋盘
6.判断输赢
7.返回并输出结果
对于面向对象来说,就需要找出相应的对象
1.电脑与玩家
2.棋盘
3.规则设置
这三条都属于对象,第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
将五子棋改成围棋,如果是面向过程的思想,就需要对多个步骤,函数进行修改和维护,而且面向过程,往往需要修改大量的代码,因为程序的每一个步骤都是相互联系的。而面向对象,仅仅只需要对对象进行维护,并且每一个对象之间独立性较强
所以相对于面向过程,面向对象有更好的维护,复用,和扩展功能
而我们的面向对象,只需要关注寻找对象,构建对象,使用对象这三点,关键是抽象出类出来
类与对象的使用
语法:
Java中的类是通过class关键字来定义的,其语法格式如下:
[修饰符] class 类名 [extends 父类名] [implements 接口名]{undefined
// 类体
}
这里的extends和implements为可选项,类体包括成员变量(又称为字段和属性)和成员方法
class后面的类名采用大驼峰
成员变量定义在类当中,方法的外面
类相当一个模板,根据这个模板,可以创造很多的对象,类是对象的抽象归纳,这里的类也可以看作是一种自定义类型
下面定义一个Person类,由名字年龄构成,成员方法为人的吃饭,睡觉等行为
class Person{
public String name;
public int age;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
在使用这个类,必须先实例化一个对象,有类才有对象
对目标进行访问,首先这个目标肯定是一个实体,只有拥有一个实例化对象,才能对对象进行访问和修改,就相当于类只是一个图纸,只有做成一个物理模型,才能对这个模型进行修改。
那对象具体怎样创建呢?这个时候就需要用过new关键字去构建一个对象
Person per=new Person();
既然Person是一种自定义类型,那上述代码,前面就是类型,后面就是变量
这里的per是一个引用变量,存放的是对象的地址,这个引用指向的就是这个对象
类与对象的使用与说明
1.类是一种自定义类型,可以用来定义变量,在java中由类定义出来的变量我们称为成员变量
2.一个类可以定义多个变量,实例出来的对象会占用实际的物理空间,存储类成员变量
3.类实例化就相当于,生活中构建房子,类只是一个设计图,只设计出需要什么,但是无真是的建筑存在,只有真正实例化一个对象,才会分配储存数据,占用物理空间。
4.只有使用new关键字,才能实例化一个对象,才会分配一块内存
对象的初始化
当成功创建一个对象后,需要对该对象进行初始化
java中对对象进行初始化,需要使用 “.”操作符
如果不对对象进行初始化的话,默认该变量中的成员变量初值为对应相应的零值
public class classDemo {
public static void main(String[] args) {
//实例化一个对象
Person per1=new Person();
//对per1对象进行初始化
per1.age=20;
per1.name="zhangsan";
per1.eat();
per1.sleep();
Person per2=new Person();
//对per2对象进行初始化
per2.age=30;
per2.name="lisi";
per2.eat();
per2.sleep();
}
}
this的使用
1.this可以代表当前对象的引用
2.可以避免成员方法参数与成员名称冲突,将成员变量与其他参数区别开
this.data//访问成员变量
this.fun();//访问成员方法
this();//调用构造方法,具体看下文构造方法
//定义一个日期的类
public class MyDate {
public int year;
public int month;
public int day;
public void setDate(int year,int month,int day) {
this.year = year;
this.month = month ;
this.day = day;
//如果不区分,就可能出现
//year = year;
//month = month ;
//day = day;
}
public void printDate() {
System.out.println("年:"+this.year+"月:"+this.month+"日:"+this.day);
}
public static void main(String[] args) {
// this.printDate();
MyDate myDate = new MyDate();
myDate.setDate(2022,3,25);
myDate.printDate();
}
}
构造方法
代码:Person per=new Person();
你是否有疑惑为什么最后一个Person后面会跟一个括号
其实一个括号代表的是调用一个无参数的构造方法,当你编写的程序中,没有构造方法,系统其实就调用隐藏的无参数的构造方法,只不过这个构建函数无实际作用。如果程序存在构造方法,那系统就不会默认生成无参数的构造方法
什么是构造方法?构造方法与普通的成员方法有什么不同?
1.构造参数没有返回值,即使void也不行
2.构造方法中的方法名与该类的名字相同
构造方法仍然支持方法重载,调用哪一个方法,由参数列表决定
this可以调用本类的构造方法
public Student() {
//调用本类中 带有2个参数的构造方法,第一个参数的类型是String,第2个参数的类型是int
this("gaobo",18);
}
public Student(String name,int age) {
this.age = age;
this.name = name;
System.out.println("这个是带2个参数的构造方法!");
}
操作可行的前提是,要保证this语句在该方法中最前面的一行,注释除外
并且不能形成环(两个构造方法相互调用)
java类中支持快速打印出成员变量,不需要自己写一个show方法来进行打印
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
toString方法,它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法,toString
方法会返回一个“以文本方式表示”此对象的字符串。
IDEA快速生成toString方法的快捷键:鼠标右键->generate->toString
到此这篇关于Java 类与对象超基础讲解的文章就介绍到这了,更多相关Java 类与对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!