当前位置: 首页 > news >正文

面向对象

面向对象

      • 面向对象
        • 一、什么是对象
        • 二、什么是面向对象
        • 三、对象
        • 四、什么是类
        • 五、实例变量
        • 六、实例方法
        • 七、方法重载(overload)
        • 八、构造方法
        • 九、对象的创建过程
        • 十、构造方法重载
        • 十一、this关键字

面向对象

一、什么是对象

万物皆对象。

二、什么是面向对象

面向对象是一种编程思想。

一般情况下是与面向过程对比来说的。

面向过程:

​ 将大象装进冰箱。三步。一般用来解决相对简单的业务问题,代码量较少。

面向对象:

​ 使用相应的思想去解析该问题。

  • 大象:大小
  • 冰箱:容积、入口
  • 执行者:推

面向对象思想一般用来解决大型项目,以及比较复杂业务问题。代码量较多。

三、对象

对象具备一定的特征和行为。

特征:一般使用名词。又称为属性。代表对象有什么。例如:大小、颜色等

行为:一般使用动词。又称为方法。代表对象能做什么。例如:吃、跑等

四、什么是类

类是对象产生的模板。具备有相同的特征和行为的对象,所抽取的共同的特征和行为的模板称为类。

/*** 狗*/
public class Dog {// 属性(特征)String brand; // 品种int age; // 年龄String sex; // 性别String furColor; // 毛色// 方法,行为public void eat() {System.out.println("正在吃...");}public void sleep() {System.out.println("正在睡...");}
}
public class Demo1 {public static void main(String[] args) {// 创建一只狗Dog dog1 = new Dog();dog1.brand = "二哈";dog1.age = 2;dog1.sex = "公";dog1.furColor = "黑白";System.out.println("品种为:" + dog1.brand + ",年龄为:" + dog1.age + ",性别为:" + dog1.sex + ",颜色为:" + dog1.furColor);dog1.eat();dog1.sleep();Dog dog2 = new Dog();dog2.brand = "金毛";dog2.age = 1;dog2.sex = "公";dog2.furColor = "金色";System.out.println("品种为:" + dog2.brand + ",年龄为:" + dog2.age + ",性别为:" + dog2.sex + ",颜色为:" + dog2.furColor);dog2.eat();dog2.sleep();}
}

五、实例变量

对象也叫实例,属性也叫特征、字段(field)、实例变量。

一般变量需要先赋值后使用,实例变量(属性)不需要赋值,可以直接使用,会有默认值。默认值和数组的默认值相同。

public class Demo03 {public static void main(String[] args) {Student s1 = new Student();System.out.println(s1.score); // 打印默认值0}
}
局部变量实例变量
定义位置定义在方法的内部定义在类的内部,方法的外部
默认值没有默认值,先赋值后使用有默认值,与数组相同
使用范围从定义的行到其结构结束本类内部有效
命名冲突局部变量不允许重名不能与实例变量同名,但是可以与局部变量同名。局部变量优先

六、实例方法

实例方法在定义时不能加static。

分为方法声明和方法实现。

方法声明指方法的名称、返回值、参数列表等。

方法的实现即大括号中间的内容。

public class Student {int score;public void printScore() // 方法声明// 方法实现{int score = 5;System.out.println(score);System.out.println(this.score);}
}

七、方法重载(overload)

方法重载是指方法名称相同,参数列表(类型、个数、顺序)不同。与返回值类型、访问修饰符无关。

系统根据参数列表去找到相应的方法进行调用。

public class Person {// 食物public void eat(String s) {}// 药物public void eat(int n) {}public void eat(int n, String m) {}public void eat(String n, int m) {}// 口香糖public void eat(double n) {}
}

八、构造方法

是类中的一个特殊方法,用来创建对象。

特点:

  • 与类名完全相同
  • 没有返回值类型
  • 不能使用点号调用,需要使用new 关键字调用
  • 如果没有在类中定义构造方法,则编译器会自动提供无参构造方法。
public class Cat {String name;public Cat() {System.out.println("被调用");}// 不报错,可以存在,但是不应该如此定义一个普通方法
//	public void Cat() {
//		System.out.println("普通方法");
//	}
}
public class Demo05 {public static void main(String[] args) {Cat cat = new Cat();}
}

九、对象的创建过程

步骤:

  • 分配内存空间
  • 属性的初始值和默认值
  • 构造方法调用
  • 将对象的地址赋值到变量中

十、构造方法重载

可以创建带参数的构造方法,此方法传入的参数,可以使用属性来保存。

注意:如果手动创建的构造方法,那么自带的默认的无参构造方法就没有。

public class Student {String name;int age;public Student(String n) {// 保存传入的参数name = n;}public void introduce() {System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);}
}public class Demo1 {public static void main(String[] args) {Student s = new Student("张三");s.introduce();}
}

有参构造方法可以减少给属性赋值的代码,强制要求在创建时必须要给属性赋值,才能正确使用。

public class Student {String name;int age;public Student() {}public Student(String n) {// 保存传入的参数name = n;}public Student(String n, int a) {// 保存传入的参数name = n;age = a;}public void introduce() {System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);}
}

十一、this关键字

当构造方法中,变量名与属性相同时,应该使用this关键字调用属性。

public class Student {String name;int age;public Student(String name, int age) {// 保存传入的参数this.name = name;this.age = age;}public void introduce() {System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);}
}

this关键字表示当前类的对象。有以下用法:

1、调用当前对象属性(如上代码)

2、调用当前对象的方法。

3、调用其他构造方法

public class Student {String name;int age;String sex;public Student(String name, int age) {// 保存传入的参数this.name = name;this.age = age;}public Student(String name, int age, String sex) {// 调用其他构造方法this(name, age);this.sex = sex;}public void introduce() {System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);}public void m1() {System.out.println("方法m1被调用,也进行自我介绍");// 调用当前对象的方法,哪个对象调用m1方法,this就指代哪个对象。this.introduce();}
}
http://www.lryc.cn/news/33564.html

相关文章:

  • mpi4py 运行过程中出现Read -1, expected xxx, errno = 1 解决方案
  • PMP考前冲刺3.07 | 2023新征程,一举拿证
  • 60条Python日常工作中的高频写法,收藏
  • (小甲鱼python)函数笔记合集七 函数(XI)总结 python函数的函数文档、类型注释、内省详解
  • Leetcode是什么
  • 2023-03-07 MySQL—基于规则优化-子查询优化
  • Rocketmq技术详解
  • TeeChart VCL/FMX v2023 crack
  • [Java·算法·困难]LeetCode32. 最长有效括号
  • pytorch如何搭建一个最简单的模型,
  • JS实现css的hover效果,兼容移动端
  • 企业微信的后台怎么进入和管理?
  • 【2223sW2】LOG2
  • buuctf-web-[SUCTF 2018]MultiSQL1
  • GitLab创建仓库分配权限
  • 代码随想录-51-110.平衡二叉树
  • 项目实战典型案例27——对生产环境以及生产数据的敬畏之心
  • 如何查找你的IP地址?通过IP地址能直接定位到你家!
  • Containers--array类
  • LinqConnect兼容性并支持Visual Studio 2022版本
  • 流量监管与整形
  • 详解init 容器
  • RequestResponseBodyMethodProcessor
  • 函数的极限
  • dnf命令使用
  • CLIP CLAP
  • Debezium报错处理系列之五十二:解决Sql Server数据库安装后修改主机名导致sqlserver数据库实例名称没有修改从而无法设置CDC的问题
  • scratch老鹰捉小鸡 电子学会图形化编程scratch等级考试二级真题和答案解析2022年12月
  • 概率论小课堂:公理化过程(大数据方法解决问题的理论基础)
  • WOW64 IsWow64Process GetNativeSystemInfoWindows System32 SysWOW64