Java_static关键字 继承 构造方法 抽象类

本文深入解析Java中的静态关键字应用,包括静态变量、静态方法、静态代码块的特性和使用方式,以及抽象类的概念、特点和注意事项,帮助读者掌握Java高级特性。

1 static关键字

1.1概念

修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的。也就是说,可以不靠创建对象来调用。

1.2 使用格式
1.2.1 类变量
static 数据类型 变量名;
1.2.2 静态方法
修饰符 static 返回值类型 方法名 (参数列表){ // 执行语句
}
1.2.2.1 调用格式

// 访问类变量 类名.类变量名;
// 调用静态方法 类名.静态方法名(参数);

1.2.3 静态原理
  1. 是随着类的加载而加载的,且只加载一次。
  2. 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
    它优先于对象存在,所以,可以被所有对象共享。
    在这里插入图片描述
1.2.4 静态代码块
  1. 静态代码块:定义在成员位置,使用static修饰的代码块{ }。
  2. 位置:类中方法外。
  3. 执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。
public class ClassName{ 
static {
// 执行语句 }
}
1.2.5静态方法和成员变量的区别

静态变量也叫类变量 成员变量也叫对象变量

  • 所属不同
    • 静态变量属于类,所以也称为为类变量
    • 成员变量属于对象,所以也称为实例变量(对象变量)
  • 内存中位置不同
    • 静态变量存储于方法区的静态区
    • 成员变量存储于堆内存
  • 内存出现时间不同
    • 静态变量随着类的加载而加载,随着类的消失而消失
    • 成员变量随着对象的创建而存在,随着对象的消失而消失
  • 调用不同
    • 静态变量可以通过类名调用,也可以通过对象调用
    • 成员变量只能通过对 象名调用

2 继承

2.1 特点

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要 继承那一个类即可

2.1.1 成员变量

如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。
如果子类父类中出现重名的成员变量,这时的访问是有影响的。

父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this 。
使用格式:
super.父类成员变量名

2.1.2 成员方法(重写)

如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
**方法重写 **:(父类下方法重名)子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效 果,也称为重写或者复写。声明不变,重新实现。

2.2 构造方法

当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢?

  1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
  2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构 造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。

2.3 super和this

2.3.1super和this的含义

super :代表父类的存储空间标识(可以理解为父亲的引用)。
this :代表当前对象的引用(谁调用就代表谁)。

2.3.2用法·
  1. 访问成员
    this.成员变量 ‐‐ 本类的
    super.成员变量 ‐‐ 父类的
    this.成员方法名() ‐‐ 本类的
    super.成员方法名() ‐‐ 父类的
  2. 访问构造方法
    this(…) ‐‐ 本类的构造方法
    super(…) ‐‐ 父类的构造方法

子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。 super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。

3抽象类

3.1抽象概念

抽象方法 : 没有方法体的方法。
抽象类:包含抽象方法的类。

3.2 使用格式
3.2.1 抽象方法

使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
定义格式:

修饰符 abstract 返回值类型 方法名 (参数列表);
public abstract void run();
3.2.2抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。 定义格式:
abstract class 类名字 { }

3.3 抽象类成员特点
  • 抽象类的成员特点
    • :成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
    • :构造方法:有。
    • 用于子类访问父类数据的初始化。
    • 成员方法:既可以是抽象的,也可以是非抽象的。
3.4 注意事项
  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
    理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
    理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
  3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
    理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设 计。
  4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值