面向对象知识点

面向对象

一、理解

生活中 - 类:抽象的概念,把具有相同特征和操作的事物归为一类

代码中 - 类:抽象的概念,把具有相同属性和方法的对象归为一类

生活中:先有实体(对象),再有类

代码中:先有类,再有实体(对象)

注意:类相当于模板,刻画出对象应该拥有怎样的属性和方法

二、编写类,创建对象

属性:写在类里,方法外的变量

1.创建人类

//人类
//注意:类里只有属性和方法
public class Person {

	//属性
	String name;
	int age;
	char sex;
	
	//方法
	public void eat(){
		System.out.println("吃饭饭");
	}
	
	public void sleep(){
		System.out.println("睡觉觉");
	}
}

2.在测试类里创建人类的对象

//测试类:测试我们写好的代码
//测试类必须有主方法
public class Test01 {
	
	public static void main(String[] args) {
		//需求:创建人类,再创建人类的对象
		
		//创建人类的对象
		Person p = new Person();
		
		//操作属性 -- 设置属性
		p.name = "倪飞";
		p.age = 21;
		p.sex = '男';
		
		//操作属性 -- 获取属性
		System.out.println(p.name);
		System.out.println(p.age);
		System.out.println(p.sex);
		
		//调用方法
		p.eat();
		p.sleep();	
	}
}

三、属性 - 全局变量

含义:类里,方法外的变量

public class A{
 	//属性 - 全局变量
    String str1; //成员变量
    static String str2;//静态变量
    
    public void method(){}
}

四、成员变量

含义:属于对象的变量

注意:每个对象独享一份成员变量,而且系统会为成员变量赋默认值

默认值:

​ 整数类型:0

​ 浮点类型:0.0

​ 字符类型:’ ’

​ 布尔类型:false

​ 引用类型:null

成员变量 vs 局部变量

成员变量:类里,方法外的变量,作用于整个类,每个对象独享一份成员变量,而且系统会为成员变量 赋默认值

局部变量:方法里的变量,系统不会赋默认值

五、成员方法

语法:

​ 访问修饰符 返回值类型 方法名([参数]){}

成员方法 vs 静态方法

成员方法必须用对象调用

静态方法必须用类名调用

六、构造方法

含义:与类名形同,且没有返回项的方法

作用:

  1. 创建对象(new 构造方法() 创建对象)

    1. 初始化数据

注意:没有参数的构造方法叫做无参构造,当没有其他有参构造时,系统会默认实现

构造方法 vs 普通方法(成员方法和静态方法)

构造方法:必须和类名相同且没有返回项

普通方法:必须有返回项(不管是返回具体的值还是void)

使用new关键字时开辟新空间,并创建属性,并给属性赋默认值,然后调用构造方法再决定是否对默认值进行初始化。

在这里插入图片描述

七、private

含义:私有化

作用:

  1. 修饰属性:私有化属性,外界不能被调用

  2. 修饰方法:私有化方法,外界不能被调用

外界:类的外面

应用场景:

​ 如果当前类的属性不想让外界调用,就用private修饰

​ 如果当前类的方法不想让外界调用,就用private修饰

八、封装

好处:避免直接操作属性,可以在set/get方法中做额外的功能

步骤:

  1. 私有化属性

    1. 添加get/set方法

九、小结

编写一个类的步骤:

  1. 编写属性,并用private私有化

    1. 创建无参构造和有参构造
    2. 添加get/set方法
    3. 添加其他方法

为什么私有化属性?

不想让外界随便调用,考虑到数据的安全性

为什么添加无参构造和有参构造?

添加有参构造的目的方便在创建对象时就初始化数据,但是编写了有参构造,系统就不会默认实现无参构造,所以自己还要去写一个无参构造

为什么添加get/set方法?

因为私有化属性后,使用get/set方法对外提供获取和设置的功能,还可以额外添加功能

十、this

含义:本对象

作用:

  1. this.属性:调用属性

    1. this.方法:调用方法
    2. this() : 调用构造方法

十一、分包

基本的好处:防止了类的重名

项目中的好处:项目中有很多类,类的功能也不一样,可以把相似的类放在一个包里

十二、static

含义:静态的

作用:

  1. 修饰属性:类属性/静态变量,直接用类名调用,该类的每个对象共享一份

静态变量的生命周期:

1. 在类加载到方法区时,系统会扫描该类的静态变量并存放在静态区中
2. 项目结束时,静态区中的数据才会被回收

应用场景:static + final(下周去学习)

  1. 修饰方法:类方法/静态方法,直接用类名调用

应用场景:工具类

注意:该类只是纯粹的功能,就可以把该类变为工具类,直接用类名调用静态方法即可

  1. 静态代码块:

应用场景:初始化数据(功能和构造方法类似)

构造方法 vs 代码块 vs 静态代码块

构造方法:创建对象时调用,初始化数据(成员变量、静态变量)

代码块:创建对象时优先于构造方法调用,初始化数据(成员变量、静态变量)

静态代码块:字节码文件加载到方法区时调用,初始化数据(静态变量)

十三、继承

含义:子类继承父类的属性和方法

语法:public class 子类 extends 父类{}

注意:一个类只能继承另一个类(单继承)

好处:减少代码的冗余

应用场景:多个类,拥有相同的属性和方法,就可以把这些相同的属性和方法抽取到父类中

十四、深入继承

  1. 子类可以继承父类的私有化属性和方法吗?

可以的

  1. 创建子类对象,会调用父类构造方法吗?

  1. 创建子类对象,调用父类构造方法的目的?

在子类对象中开辟空间,用于存储父类的属性

  1. 创建子类对象,会创建父类对象吗?

不会

  1. 创建子类对象,先调用父类构造方法还是子类构造方法?

先调用子类构造方法

十五、super

含义:父类

作用:

  1. super.属性:在子类中,调用父类非私有化属性

    1. super.方法:在子类中,调用父类非私有化方法
    2. super():在子类中,调用父类非私有化构造方法

十六、重写

含义:将父类里的方法,在子类中重新写一遍

应用场景:父类方法不满足子类需求时,考虑使用重写

条件:

  1. 在子类中

    1. 返回值、方法名、参数列表必须和父类重写的方法一致
    2. 访问修饰符不能比父类更严格

十七、访问修饰符

访问修饰符本类本包同包子类不同包不同包子类
privateok
default(默认权限)okokok
protectedokokokok
publicokokokokok
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值