面向对象——继承、代码块、final关键字

继承

1. 继承中的属性

1.1 继承中不同名属性访问

​ 子类可以直接调用父类中的非私有属性

1.2 继承中同名属性访问

​ 在子类中定义了同名的成员变量,在子类中,根据就近原则来进行访问

class Fu{
  int x = 10;
}
class Zi extends Fu{
  int x = 100;
  public void method(){
    System.out.println(x);
    //调用父类的
    //System.out.println(super.x);
  }
}
public class Demo{
  public static void main(String[] args){
    Zi zi = new Zi();
    zi.method();//100
  }
}

​ 如果子类中有成员变量与父类中成员变量同名,还想调用父类的属性,则需要在调用时加上super–>super.x。

2. 继承中的方法

2.1 继承中构造方法关系

​ 在初始化子类数据前,必须先完成对父类数据的初始化;

​ 实例化子类对象时,会隐式调用父类无参构造方法(在构造方法第一句默认加上super(),默认访问父类的空参构造);

​ 如果需要调用父类的有参构造,则需要通过显式super(参数列表)进行调用;

​ 当显式super(参数列表)进行调用父类带参构造时,原隐式调用父类无参构造消失;

​ 父类定义了带参构造后无参构造消失,子类(继承)无参构造会报错(因为有隐式调用super(););

​ 构造方法中不能同时存在this()和super(),两个在语法上都要求放在构造方法的第一行;

​ 一个类没有显示继承父类,则默认继承Object类

练习:Java继承中的构造代码块和构造方法执行顺序–层次初始化

class Fu {
	static {
		System.out.println("静态代码块Fu");//随类而加载,先加载父类的静态代码块,后执行子类的静态代码块
	}
	{
		System.out.println("构造代码块Fu");//随对象创建而执行(多次)
      //对象的初始化过程:父类对象的初始化过程(构造代码块 -> 构造方法)>  子类对象的初始化过程(构造代码块 -> 构造方法)。这步(构造代码块)是随类的加载而加载。
	}
	public F() {
		System.out.println("构造方法Fu");
	}
}
class Zi extends Fu {
	static {
		System.out.println("静态代码块Zi");
	}
	{
		System.out.println("构造代码块Zi");
	}
	public Zi() {
		System.out.println("构造方法Zi");
	}
}
public class Demo{
  public static void main(String[] args){
    Zi zi = new Zi();
  }
}
2.2 继承中不同名方法访问

​ 子类可以直接调用父类的非私有方法,也可以调用子类的特有方法,但是父类不能调用子类的特有方法。

2.3 继承中同名方法访问

​ 在子父类中出现方法名相同,但两个方法的实现内容不一样的

重写:

​ 在父类无法满足子类需求时,就可以使用重写;

​ 在具有继承关系的类中,存在同一个方法名,参数相同,返回值类型相 同的方法,就是方法重写(override);

​ @Override注释可以验证子类方法是否对父类方法重写正确;

​ 父类的static方法和private方法无法被重写;

​ 方法在重写时,权限(权限修饰符)不能越来越小。

3. 继承的特点

3.1 单继承

​ 一个子类只能继承一个父类

3.2 多层继承

​ 子类可以使用父类成员,同时也可以使用祖类成员

代码块

1. 局部代码块

1.1 语法、定义位置
{...}//定义位置:方法内
1.2 作用

​ 限制局部变量的生命周期/使用范围(大括号外失效)

2. 构造代码块

2.1 语法、定义位置
{...}//定义位置:类中,方法外
2.2 作用

​ 将多个构造函数中相同代码定义在构造代码块中,从而减少代码冗余

2.3 执行

​ 在创建对象时执行,由jvm默认调用

​ 在构造方法执行之前,执行

3. 静态代码块

3.1 语法、定义位置
static{
  ......
}//类中,方法外
3.2 作用

​ 静态属性赋值,环境变量赋值,设置默认数据(用于执行只需要执行一次的代码)

3.3 执行特点

​ 不会根据对象创建次数而多次执行,只会执行一次;

​ 在类加载的过程中执行的,早于所以的对象相关内容;

final关键字

修饰范围:类、方法、变量

  1. 修饰类

    表示最终类,不能有子类,其中所以方法不能被重写

  2. 修饰方法

    方法无法被重写

  3. 修饰属性

    该属性的值无法被修改(常量)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值