8.继承

继承

一、继承的概念
1.继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的属性或新的方法,也可以使用父类的属性和方法。
2.继承技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

二、继承的要点
1.可具有明确的类层次结构;
2.可以从父类中继承属性和方法,子类就不必去声明那些公共的属性和方法,除此之外子类还可添加自己的属性和方法来满足新需求;
3.父类的构造函数不能被子类继承;
4.父类的属性(字段)不能被子类重写;
5.子类可从父类中继承public、protected、默认(父子类同包时可以)访问修饰符定义的属性和方法,private访问修饰符定义的属性和方法不能继承;

三、继承的优点
1.代码的可重用性;
2.父类的属性和方法可用于子类;
3.设计应用程序变得更加灵活有弹性;
4.便于系统的可扩展性;

四、类定义的改进
在这里插入图片描述
五、super关键字的使用:
1.super()或super( [参数列表] ):调用父类的默认构造函数或带参数的构造函数。
2.super.方法( [参数列表] ):调用父类的方法。
继承案例:
在这里插入图片描述
六、继承关系中父类哪些不可被子类继承?

  1. 构造函数不可继承;
  2. 父类的属性可继承,不可重写(不可覆盖);
  3. 静态方法可继承,不可重写(不可覆盖);
  4. final方法可继承,不可重写;

七、父子类成员的初始化过程
过程:父类的静态初始化块—>子类的静态初始化—>父类的初始化块—>父类的构造—>子类的初始化块—>子类的构造

八、继承中的类型转换:(向上转型也就是自动转型,向下转型也就是强制转型)
1.在继承树中向上转型(子类–>父类)总是安全的会自动发生。
2.在继承树中向下转型(强类型转换:父类–>子类)是不安全的。

Vehicles vehicle = new Car("奔驰","红色",4); // vehicle实际上引用的是一个Car对象
		//强制类型转换
		Car car = (Car)vehicle; //正确
		car.show();
		vehicle = new Bus("巴实","蓝色",40); 
		//Car car2 = (Car)vehicle; //这里的强制类型转换错误,因为vehicle实际引用的是一个Bus
		Bus bus = (Bus)vehicle;
		vehicle.show();

九、instanceof (实例测试运算符) 在类型转换中的作用:
1.Instanceof关键字用测试一个对象是否是某类的一个实例,或者实现了某个接口。测试结果是一个布尔值。
2.在强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性;

十、什么时候使用继承
当满足“是一个(is a)”的关系时。子类应当可以替换父类并出现在父类能够出现的任何地方[替换原则 (the Liskov Substitution Principle LSP) ]也就说任何使用父类的地方子类都可以使用。
注:设计模式的6大原则:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40574657/article/details/88314164