【Java】继承和派生

如果想声明一个类继承另一个类,需要使用extends关键字
例子:

public  class  A {}
public   class  B  extends A{}

构造顺序

子类的构造顺序:编译器会一直上溯到最初类,执行该类构造方法,然后依次执行各子类构造函数,如下;以:A->B->C 顺序来初始化子对象各部分
在这里插入图片描述

先执行父类构造方法,再执行子类构造方法
如果在子类中未显式调用父类构造方法,则编译器会自动调用父类的默认构造方法

继承性

子类不能完全继承父类的所有方法和属性
1 若子类和父类在同一个包内,子类可以继承父类中访问权限设定为public、 protected、 default的成员变量和方法,除了private都可以
2 若子类和父类不在同一个包内,子类可以继承父类中访问权限设定为public、 protected的成员变量和方法。
换言之:
1、private类型的属性或方法不能被继承
2、public、protected类型的属性或方法一定可以被继承
3、defalut 类型要看子类是否和父类在一个包。
例子:
在这里插入图片描述

在这里插入图片描述

隐藏和重写

1 属性隐藏
同名
子类对象在寻找方法或成员变量的时候,先搜索子类独有空间,在搜索父类空间
在这里插入图片描述

2 方法重写要求:

两同两小一大:
两同:
方法名相同 参数列表一致
两小:
子类返回值类型应该更小或者相等
子类的抛出的异常小于等于父类的抛出的异常类
一大:
子类的访问权限比父类访问权限要大和相等
例子:
1
在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
总结
(1) 变量只能被隐藏(包括静态和非静态)

(2) 可以用子类的静态变量隐藏父类的静态变量,也可以用子类的非静态变量隐藏父类的静态变量

(3) 静态方法(static)只能被隐藏,不能被重写;

(4) 非静态方法可以被重写;

(5) 不能用子类的静态方法隐藏父类中的非静态方法,否则编译会报错;

(6) 不能用子类的非静态方法覆盖父类的静态方法,否则编译会报错;

super的用法

1 使用super调用父类的构造方法
父类构造方法不能继承 ,所以
只有子类的构造方法采用super调用父类的构造方法,其它方法调用出错
在这里插入图片描述

super调用,必须是方法体中的第一条语句,否则出错

2 可以利用super调用父类的属性1和方法
在这里插入图片描述
3
this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
在这里插入图片描述
调用this()必须写在构造方法的第一行,
调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super()
所以,不能同时用super和this

关键词final

1、修饰变量,为常量,值不可变;

对基本类型来说是其值不可变,而对 对象属性来说其引用不可再变,引用空间的值是可以改变的

fianl修饰属性必须初始化,初始化只能在初始化可以在两个地方:
一是其定义处、二是在构造函数中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、修饰对象,值可变,引用不变;

3、修饰方法,方法不可重写,可被继承(可以直接使用);

即 在声明类中,一个 final 方法只被实现一次
在这里插入图片描述

4、修饰类,无子类,不可以被继承,更不可能被重写。

在这里插入图片描述

对象的多态性

上转型

因为子类其实是一种特殊的父类,因此Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型,向上转型由系统自动完成。
例如:父类 对象名称=new 子类()

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。
编译时(父类 对象名称)按照父类对象看待,
运行时( new 子类() )实际是子类对象。,输出子类的结果

1 对象的实例变量不具备多态性
在这里插入图片描述

2 与方法不同的是,类的静态变量和静态方法不具备多态性
在这里插入图片描述

下转型

先new上转型,再下转型(强制)
不能直接new,强制
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值