千锋学习day09面向对象

面向对象

面向对象

面向对象思想(Object Oriented Programming )OOP:

  • 一切客观存在的事物都是对象,万物皆对象
  • 任何对象,一定具有自己的特征行为

对象:

特征:称为属性,一般为名词,代表对象有什么

行为:称为方法,一般为动词,代表对象能做什么

现实中的对象

手机:有品牌、颜色、价格、重量 能打电话、发短信

车:有品牌、颜色、型号、产地 能前进、后退

程序中的对象

  • 如何使用程序模拟现实世界,解决现实问题?

    1、首先,在程序当中,必须具有和现实中相同的对象,用以模拟现实实际

    2、然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题

  • 现实中的对象多数来自于"模板",程序中的对象也应该具有"模板"

什么是类

程序中的模板 Java的基本编程单元是类

通过程序中的模板创造出来的实体,即为程序中的对象

类的抽取

在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分

类的定义

public class Dog{//类名
    String breed;//品种
    int age;//年龄
    String sex;//性别
    String furColor;//毛色
	public void eat(){
        System.out.println("eating....");
    }
    public void sleep(){
        System.out.println("sleeping....");
    }
}

属性:通过变量表示,又称实例变量

语法:数据类型 属性名;

位置:类的内部,方法的外部

方法:通过方法表示,又称实例方法

语法:

​ publi 返回值类型 方法名(形参){

​ //方法的主体

}

注意:不再书写static

对象的创建

public static void main(String[] args) {
		/*
		 * 将对象保存在相同类型的myDog变量中, myDog变量称为"对象名"或"引用名"
		 **/
		Dog myDog = new Dog();// 基于Dog类创建对象
		// 访问属性: 对象名.属性名 = 值;//赋值
		myDog.breed = "萨摩";
		myDog.age = 2;
		myDog.sex = "公";
		myDog.furColor = "白色";
		// 访问属性: 对象名.属性名;//取值
		System.out.println(myDog.breed + "\t" + myDog.age + "\t" + myDog.sex + "\t" + myDog.furColor + "\t");
		//调用方法:对象名.方法名();
		myDog.eat();
		myDog.sleep();
}

类与对象的关系

类:定义了对象应具有的特征行为,类是对象的模板 类是对象的抽象

对象:拥有多个特征和行为的实体,对象是类的实例

实例变量

对于实例变量而言,为赋值并不会编译错误。

实例变量的默认值:

整数:0

小数:0.0

字符:\u0000(空格)

布尔:false

其他:null

实例变量与局部变量的区别

局部变量实例变量
定义位置方法或方法内部的结构当中类的内部、方法的外部
默认值无默认值字面值(与数组相同)
使用范围从定义行到包含其结构结束本类有效
命名冲突不允许与局部变量重名不允许与实例变量重名,可与局部变量重名,局部变量优先

实例方法

对象的实例方法包含两部分:方法的声明和方法的实现

方法的声明:

  • 代表对象能做什么
  • 组成:修饰符 返回值类型 方法名(形参列表)

方法的实现:

  • 代表对象怎么做:即如何实现对应的功能
  • 组成:{逻辑代码}

课堂案例



方法重载的概念:

有些情况下,对象的同一种行为可能存在多种实现过程

例如:人对象的"吃"行为,吃饭和吃药的过程就存在差异

到底采用哪种实现过程,需要取决于调用者给定的参数

方法重载

重载(Overload):一个类定义多个相同名称的方法

要求:

  • 方法名相同
  • 参数列表不同(类型、个数、顺序)
  • 与访问修饰符、返回值类型无关

调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法

好处:灵活、方便、屏蔽使用差异

代码调错

两个方法的方法名称和参数列表都相同,只要参数名称不一样,编译报错

注意:只是参数名称不同,并不能构成方法的重载

构造方法

构造方法:类中的特殊方法,主要用于创建对象

特点:

  • 名称与类名完全相同
  • 没有返回值类型
  • 创建对象时,触发构造方法的调用,不可通过句点手动调用

注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法

创建对象的过程

new Student(); 触发对象创建

对象的创建过程:

  • 内存中开辟对象空间
  • 为各个属性赋予初始值
  • 执行构造方法中的代码
  • [将对象的地址赋值给变量]

对象的内存分配

存储对象的变量(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法

构造方法重载

构造方法也可重载,遵循重载规则

创建对象时,根据传入的参数,匹配对应的构造方法

默认构造方法

在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法

如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据务求自行添加

经验:虽然编译器会默认提供无参构造 但是还是每一次都添加上无参构造

this关键字

类是模板,可服务于此类的所有对象;

this是类中默认引用,代表当前实例

当类服务于某个对象时,this则指向这个对象

this的第一种用法

调用实例属性、方法

当实例变量和局部变量重名时,优先访问局部变量;此时,如需访问实例变量,

需要增加this.前缀。不存在重名时,则可以省略

public class T2 {
	public static void main(String[] args) {
		Student s1 = new Student();
		s1.sayHi();
	}

}

class Student {
	String name = "tom";

	public void sayHi() {
		String name = "jack";
		System.out.println(name);
		System.out.println(this.name);
	}
}

this的第二种用法

调用本类中的其他构造方法 如:this()、this(实参)

在构造方法中,调用本类的其他构造方法,即可复用构造方法中的逻辑代码

this():调用无参构造

this(实参):调用有参构造

注:必须在构造方法的首行

总结

  • 什么是对象

    一切客观存在的事物都是对象,万物皆对象

  • 什么是类

    定义了对象应具有的特征和方法,类是对象的模板

  • 什么是方法重载

    方法名相同、参数列表不同

  • 什么是构造方法

    类中用于创建对象的特殊方法,名称与类名相同,没有返回值,不可通过句点调用

  • 什么是this关键字

    代表当前实例,通过this.访问实例成员;

    通过this()/this(xxx)访问本类中的其他构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值