方法和面向对象(面向对象)

方法+面向对象

面向对象

面向对象编程

面向对象程序设计(OOP Object Oriented
Programming)是当前主流的程序设计架构,使我们编
程过程更符合人们的日常生活习惯
面向过程程序设计,简称opp,c语言就是面向过程的编程
语言
面向过程思维方式中更多的体现的是执行者(自己做
事情),面向对象中更多的体现是指挥者(指挥对象
做事情)

面向对象四步骤

1.创建一个类描述一类事物
1.1通过成员变量表示数据
1.2通过普通方法表示功能
2.根据类创建对象
定义引用=new构造方法
3.给对象属性赋值
对象.属性=值
4.调用对象的方法 解决问题
对象.方法名(实参);
方法重载:一个类中 几个方法 方法名相同形参列表不同的现象
一个方法只有返回值类型不同不构成重载

面向对象的三大特性

  • 封装
    之前学习的方法,就是将某个功能写成方法,编写类
    的过程也是一种封装
    提高了代码的复用性,便于调用者的使用,提高了安
    全性
  • 继承
  • 多态

类和对象


  • 对某一类有相同特征的事物的抽象,例如建造房子时设
    计的模型

  • 对象
    表示现实中该类事物的个体,就是类的具体实现,例如
    已经建造成的一个房子

    创建对象的格式 类名 对象名 = new 类名();

    例如:Woman woman=new Woman ( ) ;

    使用对象主要是想用对象当中的属性方法。

    对象调用: 对象名.属性名/方法名 ( ) ;

  • 属性
    该类事物的共有的特征,实际就是我们之前所学习的变
    量,只不过和之前学过的变量稍有区别

    调用成员变量格式: 对象名.成员变量 ,如果在当前类中非
    静态方法中可以直接写成员变量名称

  • 方法
    该类事物共有的功能

    调用方法的格式: 对象名.方法名(具体的参数) ,如果在当
    前类中,可以直接写方法名

  • 新建一个类,写main方法

  • 注意:我们程序的入口仍然是main,所以要想对成员变量
    赋值,以及调用方法,需要在main中写具体的赋值和调用
    的代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYTSMhpQ-1645093880609)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1644978822019.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgx2KZRW-1645093880614)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1644978853601.png)]

成员变量和局部变量的分别

  1. 定义的位置不同:成员变量定义在类中,局部变量定义在
    方法中

  2. 内存中存储的位置不同:成员变量存储在堆中,局部变量
    存储在栈中

  3. 生命周期不同:成员变量伴随这对象的存在而存在,局部
    变量当方法出栈后就不能使用

  4. 初始化不同:成员变量会随着对象的创建进行默认初始
    化,局部变量如果不初始化就不能使用
    ###构造方法
    类中定义的用于构建创造对象的方法
    特点: 1 没有返回值 不用void标识

    •   2 名字和类名必须相同
      
    •   3 一个类 如果没有构造方法 编译器自动加一个无参数的构造方法
      
    •   4 构造方法参数列表一般用于给属性赋值
      
    •   5 对象不能调用构造方法
      
    •   6 构造方法被new调用  调用一次 创建一个对象
      
    •   7 构造方法之间的相互调用  通过this(参数列表)
      
    •   8 所有子类构造方法的第一个语句必须是super(参数列表) 默认是super()
      
    • 构造方法和普通方法区别:
    •    1 格式不同
      
    •    2 命名不同
      
    •    3 调用不同
      
    •    4 是否有默认
      
    •    5 意义不同:
      

set方法和get方法

private关键字

private(私有的)是修饰符,使用private修饰的成员变量或者方法
只能在当前类中使用
所以使用private修饰后的成员变量就不能在其他类中
访问

注意以后我们声明类的时候,必须将成员变量用private
修饰,然后生成set和get方法

###this关键字

this关键字出现在方法中,表示当前类的对象,一个类可
以有多个对象,谁调用的方法,this指的就是谁

####/*面向对象:oop

 *    找具有帮助我解决问题功能的对象  指挥对象解决问题
 *4步骤:
 *    1 定义一个类 描述一类事物
 *        通过成员变量描述数据
 *        通过成员方法描述功能
 *    2 根据类创建对象    
 *        引用=new 构造方法();
 *    3 给对象的属性赋值
 *        对象.属性=值;
 *    4 调用对象的方法 解决问题    
 *    
 *方法重载:overload
 *    一个类中 几个方法名字相同  参数列表不同的现象
 *    重载要求: 同一个类  方法名相同  参数列表不同(参数个数不同+参数类型不同+参数顺序不同)  
 *    重载存在意义:几个方法的功能基本一样 只是需要的原始数据不同
 *    重载理解:长得相同的同卵双胞胎
 * 
 *成员变量和局部变量:
 *    成员变量:类中定义的变量
 *    局部变量:方法中定义的变量
 *成员变量和局部变量的区别:
 *    1 定义位置不同
 *    2 作用域不同
 *    3 是否有默认初始值
 *    4 修饰符不同:     
 * 
 *构造方法:constructor
 *    概念:类中 用于构建创造对象的方法
 *    特点: 1 格式:没有返回值 不用void标识
 *          2 命名:构造方法名字必须是类名
 *          3 调用:不能被对象调用 只能被new调用  每调用一次 创建一个对象
 *          4 默认:一个类 没有构造方法 编译器默认添加一个无参数的构造方法
 *          5 this(参数列表):构造方法之间的相互调用 通过this(参数列表)
 *
 * this:
 *    1 当成员变量与局部变量重名时 方法中的变量名默认指向的是局部变量
 *      通过this.变量名来指向成员变量
 *      方法中:成员前面默认有this. 
 *    2  构造方法之间的相互调用 通过this(参数列表)
 *      this(参数列表)必须是第一个语句
 *
 * 给属性赋值的方式:
 *    1 在类中直接给变量赋值
 *    2 对象.属性给属性赋值
 *    3 通过构造方法参数列表给属性赋值
 *    4 通过普通方法参数列表给属性赋值            
 *          
 * 内存图:
 *    1 类加载
 *    2 创建引用:引用名+对象类型+地址栏
 *    3 创建对象:
 *         3.1 内存中为对象划分区域
 *         3.2 通过构造方法 把类中定义的成员变量和普通方法加载进对象内存中
 *         3.3 给对象的成员变量赋初始值
 *         3.4 运行构造方法的其他语句:一般是通过构造方法参数列表给属性赋值
 *    4 引用指向此对象:             
 *      

 * */

static关键字

静态的:关键字:修饰符:修饰成员变量+普通方法+内部类+代码块

static修饰成员变量:
1 不但可以被对象调用 还可以被类名直接调用
2 static修饰的成员变量是共享数据 独一份 本类的所有对象公用这一份数据
static修饰普通方法:
1 不但可以被对象调用 还可以被类名直接调用
2 static修饰的方法中 只能调用静态成员 不能调用非静态成员

被static修饰的成员::类成员
没有被static修饰的成员::实例成员
被static修饰的成员变量–类变量
被static修饰的成员方法–类方法
没有被static修饰的成员变量–实例变量
没有被static修饰的成员方法–实例方法

继承

特点:
1 子类继承父类 父类没有任何影响
2 子类中拥有父类中定义的所有成员
3 子类不能继承父类的构造方法
4 子类可以拥有一些父类没有的成员–子类特有成员
5 子类继承了父类的私有成员 但不能直接使用 只能通过父类的方法间接来使用
6 子类可以根据需求 重新定义父类的已有成员
子类重新定义父类的成员变量 要求:变量名相同即可
子类重新定义父类的成员方法 要求:返回值类型相同 方法名相同 参数列表相同(方法声明完全相同) 重写override
类似于::进化
7 一类如果没有继承其他类 默认继承Object类 :Object类–上帝类
8 java只支持类与类之间的单继承:一个类只能有一个直接父类 但可以有多个间接父类
继承:类与类之间创建关联关系 实现类的复用

final关键字

最终的,修饰符,修饰类+成员变量+局部变量+普通方法

final修饰的变量----常量

final修饰的类:不能被继承。

final修饰的成员变量没有默认初始值。

final修饰的变量值不能被更改,不能重复赋值。

final修饰的方法不能被重写(count override)

常量命名规范

所有字母大写 final String WO_DE_SHEN_FEN_ZHENG_ID=“41112328882867”;

补齐所有默认值:

class Zi01 extends Fu01{
	//2 成员变量 有默认m初始
	int b;//b=0
	void hai() {
		//4 子类方法中调用父类的成员前面默认有super.
		//super.show();
		show();
		//4 子类方法中调用父类的成员前面默认有super.
		//System.out.println(super.a+":::"+b);
		//5方法中调用实例成员 前面默认有this.
		//System.out.println(super.a+":::"+this.b);
		System.out.println(a+":::"+b);
		//6 一个方法没有返回值 return可以省略
		//return;
	}
	//1 一个类没有构造方法 默认一个无参数的构造方法
	//public Zi01() {
	     //3 所有的子类构造方法中第一个语句默认super()调用父类无参数的构造方法
	     //super();
	     //6 一个方法没有返回值 return可以省略
	     //return;
	//}
}

多态

一个类出现了多种形态

多态格式:父类引用=子类对象(父类引用指向子类对象)

多态的前提

有继承/实现关系

有方法的重写

父类引用指向子类对象

多态的特点

对于成员方法:编译的时候看=左边,运行的时候看=右边
对于成员变量:编译的时候看=左边,运行的时候看=左边

  • 因为成员方法有重写,而成员变量没有。
    ##什么时候使用多态
    定义类的成员变量、方法返回值类型、方法参数列表、数组元素类型时,都定义为父类类型 这样就可以赋值、返回、传递、装 任意子类类型的对象

多态的优缺点

优:

  • 提高了程序的扩展性

​ 具体体现:定义方法的时候,使用夫类型作为参数,在使用的时候,使用具体的子类型参与操作

  • 降低了耦合度
  • 提高了代码的复用性

缺:不能使用子类的特有功能

多态的转向

  • 向上转型

    ​ 从子到父

    ​ 父类引用指向子类对象

  • 向下转型(强转转型)

    ​ 从父到子

    ​ 父类引用转为子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值