【Java基础(六)】面向对象与类的基础知识

面向对象编程

特点:

  1. 万事万物皆对象。
  2. 对象:具体的事务或实体,例如人。
  3. 类:对对象向上抽取出像、公共的部分,类是抽象的,是一个模板,例如人类。

类包含什么

类由属性、方法、构造器、代码块、内部类组成

属性

用于定义类包含的数据,即静态特征

属性声明格式

[修饰符] 属性类型 属性名 = [默认值]

方法

用于定义类的行为特征和功能实现,即能做什么事

属性

变量

在类里面分为成员变量和局部变量

  • 成员变量:类中方法或代码块外定义的变量
  • 局部变量:类中方法或代码块中定义的变量

区别如下:

成员变量局部变量
代码位置不同类中方法或代码块外定义的变量类中方法或代码块中定义的变量
作用范围不同当前类中所有地方当前方法或代码块中
是否有默认值有默认值(具体参考各类型变量默认值),未设置时将使用默认值没有默认值,必须设置初始值,否则使用时将会报错
内存中位置不同堆内存栈内存
作用时间不同当前对象从创建到销毁当前方法从开始执行到执行完毕

注意点:

就近原则

  • 当方法形参名字(局部变量)和 属性(成员变量)名字重复时,发生就近原则,优先使用局部变量,如果要使用成员变量,需要加上this.成员变量名来修饰

方法

1. 构造器

类中的一个特殊的方法,其方法名与类名相同,在创建类的具体对象时自动调用,用于为对象进行初始化操作。

默认构造器:

  1. 如果类没有显示定义构造器,系统将默认分配一个空参数构造器
  2. 如果显示定义了构造器后,默认分配的空参数构造器将取消,如果需要使用,需要手动定义。(大多数框架需要使用,建议手动显示设置)

与其他方法的区别:

  1. 没有方法的返回值类型
  2. 方法体内部不能有return语句
  3. 构造器名字必须跟类名一样

2. 重写与重载

重写:

发生在子类和父类中,当子类对父类提供的方法不满意的时,可以对父类的方法进行重写

重写的格式要求:
子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。

重载
同一个类中,当方法名相同、形参列表不同时,多个方法构成了重载。

重写与重载的区别

英文位置修饰符返回值方法名参数抛出异常方法体
重载overload同一个类中无关无关必须相同必须不同无关不同
重写override子类和父类中父类的权限修饰符要低于子类的父类的返回值类型要大于子类必须相同必须相同小于等于不同

代码块

代码块分类:普通块、构造块、静态块、同步块

普通块

位置位于方法中,由{}包括起来的代码,主要用于限制了局部变量的作用范围

构造块

位于类中,方法外,由{}包括起来的代码

静态块

位于类中,方法外,由{}包括起来的代码,{}前面加上了static修饰

注意:静态块中只能使用静态属性和静态方法

类中代码执行顺序

  1. 执行静态块
    • 在类加载时执行,只执行一次
  2. 执行构造块
    • 不常用,通常使用构造器来替代
  3. 执行构造器
  4. 执行方法中的普通块

修饰符

1. 权限修饰符

在类中一共支持4种权限修饰符,权限从低到高分别为 private、default、protected、public,

注:default为缺省修饰符,即未显示定义修饰符时即为default修饰符,并且default修饰也不允许显示定义。

属性和方法:四种修饰符均支持

类:只支持default(缺省)、public修饰符

四种修饰符权限控制如下表

同一个类同一个包子类所有类
private
default
protected
public

2. 静态修饰符 static

被static修饰的属性和方法为静态内容,静态内容先于对象存在,被所有该类的对象共享,共用一块内存。

访问方式: 类名.属性名 或 类名.方法名

注意:

  1. 静态方法中不能使用this关键字
  2. 静态方法中不能访问非静态的方法
  3. 静态方法中不能访问非静态的属性

3. this 修饰符

this指代当前对象,this可以修饰属性、方法、构造器

举例:this修饰构造器

同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行

public class Person {
    String name;
    Int age;

	public Person(){}

	public Person(String name){
		this.name = name;
	}

    public Person(String name, int age){
        // 同一个类中的构造器可以相互用this调用
        this(name);
        // this修饰构造器必须放在第一行
        this.age = age;
    }
}

4. super 修饰符

super指代当前对象的父类。

super修饰属性和方法:

  1. 在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。

  2. 在通常情况下,super.可以省略不写

  3. 特殊情况下,当子类和父类的属性或方法重名时,你要想使用父类的属性或方法,必须加上修饰符super.,只能通过super.属性或方法来调用

super修饰构造器:

调用父类构造的代码

super()
  1. 所有构造器的第一行默认情况下都有super()。
  2. 但是一旦你在构造器中显示使用super调用了父类构造器,那么这个super()就不会给你默认分配了。
  3. 如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写。
  4. 在构造器中,由于this()和super()都必须放在第一行,所以这两者冲突,只能存在一个

5. final 修饰符

  1. 修饰变量: final修饰一个变量,变量的值不可以改变
    • 约定俗称的规定:变量名字大写
    • 修饰普通类型,值不可以改变
    • 修饰引用类型,地址值不可以改变
  2. 修饰方法: 方法不可以被子类重写
  3. 修饰类: 类不可以被继承

抽象类与抽象方法

抽象类的作用

  1. 为子类提供一个通用的模板,子类可以在此基础上进行开发,先重写父类的抽象方法,再扩展子类自己的内容。
  2. 抽象类避免了子类设计的随意性,通过抽象类,子类的设计变得更加严格,进行某些程度上的限制,使子类更加通用。

抽象类、方法的特点

  1. 一个抽象类中可以有n个抽象方法
  2. 类中如果有抽象方法,那么这个类也要变成一个抽象类。
  3. 抽象类可以被其他类继承。
  4. 一个类继承一个抽象类,如果没有重写全部的抽象方法,则子类也必须变成一个抽象类。
  5. 抽象类中也有构造器,用于给子类初始化对象时调用。
  6. 抽象类是用来给子类继承的,所以不能用final修饰。

抽象类中可以定义n个抽象方法

import 导包

包的作用

  1. 解决重名问题
  2. 解决权限问题

包名定义规范

  1. 全部小写,中间用逗号隔开
  2. 不能使用系统关键字
  3. 一般在非注释性代码的第一行声明

包的使用

  1. 使用不同包里的类需要导包
  2. 导包以后,还想使用其他包下同名的类,就必须要手动写全所在的包
import java.util.Date;

public class Demo {
    public static void main(String[] args) {
        new Date();
        // 导包以后,还想使用其他包下同名的类,就必须要手动写全所在的包
        new java.sql.Date(10L);
    }
}
  1. 同一个包下的类可以直接使用,不用导包
  2. 在java.lang包下的类,可以直接使用,不用导包
  3. 可以直接导入*,表示引用所有的包
import java.util.*
  1. Java中的导包没有包含和被包含的关系

设置目录平级格式(不显示包含关系),便于查看需要导入的包

在这里插入图片描述
7. 静态导入

导包时加上static修饰符

import static java.lang.Math.*;

静态导入后,同一个类中有相同方法时,优先使用自己定义的方法

其他

1. instanceof 类和对象的从属关系判断运算符

用于判断对象是否是指定类的实例

if (obj instanceof person) {
    System.out.println("是person类的对象");
}

2. 向上转型与向下转型

向上转型:将子类强转为父类或者间接父类

Person person = new Boy();

向下转型:将父类强转为子类或者间接子类

Boy boy = new Person();

系列文章

上一篇:【Java基础(五)】引用数据类型-数组
下一篇:【Java基础(七)】类的三大特性:封装、继承、多态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值