java进阶二

JavaSE进阶第二天

课程大纲:

  • 继承
    • super和this
    • 方法重写
    • 权限修饰符
  • 抽象类
  • final关键字
  • 代码块

一.继承

1.什么是继承

现实中:儿子继承父亲的家产
java中:继承是面向对象的三大特征(封装,继承和多态)之一
       继承是类和类之间产生了关系,产生的是子父类的关系,子类可以拥有父类的内容,但是要明白不是所有的内容都可以拥有,比如私有修饰的内容不能拥有,父亲的构造方法不能拥有

2.继承的格式

继承通过extends实现

格式:class 子类 extends 父类 { }
举例:class Dog extends Animal { }

3.为什么会有继承

多个类有共性(相同)的成员,这些共性就可以抽取到另一个类中,这个类就可以当做父类,这些共性内容的类中就不需要编写这些代码,直接继承父类即可。
    
满足is a的关系才能使用继承,xxx是xxx的一种,不要滥用继承

4.继承的好处和弊端

4.1继承的好处
提高了代码的复用性(多个类相同的成员可以放到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
4.2继承的弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削
弱了子类的独立性

5.继承的特点

1. Java中类只支持单继承,不支持多继承
错误范例:class A extends B, C { }

2. Java中类支持多层继承
    class A extends B{}
	class B extends C{}
A类继承了B类和C类
A:(孙子)  B:(父亲) C:(爷爷)

java中涉及到的子类,父类都是相对概念,不是某个类一定是子类或父类

6.继承访问成员变量的特点

6.1遵循就近原则
在子类方法中访问一个变量的时候,优先使用的是局部变量,如果没有局部变量,则使用本类的成员变量,如果没有本类的成员变量,则使用父类的成员变量 如果父类的成员变量也没有,则会报错。

 如果局部变量、本类的成员变量和父类的成员变量都有,要使用本类的成员变量使用this.,要使用父类的成员变量使用super.

7.继承访问成员方法的特点

7.1遵循就近原则
优先使用本类的成员方法,如果没有本类的成员方法,则使用父类的成员方法,如果父类中也没有,则编译报错构造方法.

8.super和this

8.1 this
  • 调用本类的成员变量 this.成员变量名

  • 调用本类的成员方法 this.方法()

  • 调用本类的构造方法 this(参数)

8.2 super
  • 调用父类的成员变量 super.成员变量名
  • 调用父类的成员方法 super.方法()
  • 调用父类的构造方法 super(参数)

9. 方法重写

9. 1 什么是方法重写(方法覆盖)
有子父关系的类中,出现了子类的方法和父类的方法声明一致,但是方法体一般不相同的方法重写一般都是方法声明一致,对方法体做一些重新的定义.
    
可以验证一个方法是否是重写的方法
@Override注解可以进行验证
9.2 方法重写的应用场景
  父类继承下来的方法,对于子类来说不满满足需求
      完全不满足
      部分满足
      完全满足:没有必要重写,直接使用父类继承下来的方法
9.3 方法重写的注意事项
9.3.1 遵循一大两同两小原则
   一大:子类重写的方法的权限修饰符要大于等于父类方法的权限修饰符
       两同:
       方法名必须相同
       参数列表必须相同
       两小:
       子类重写的方法的返回值类型要小于等于父类方法的返回值类型(针对引用类型有效,针对基本类型无效)
       子类重写的方法所抛异常必须小于等于/少于等于父类方法所抛异常(暂时不看)
       
       
       以后我们在对方法进行重写的时候,大部分情况下都是方法声明完全一致,修改的是方法体内容。
       但是你要知道的是方法声明也是可以不一致的。
9.3.2 私有的方法不能被继承,所以无法被重写
9.3.3 静态的方法不能被重写
即使子类中出现了和父类中一样的静态方法,也不是重写
9.4面试题:方法重载(overload)和方法重写(override)的区别?

方法重载:

  在同一个类中,出现方法名相同,参数列表不同的方法的情况
      参数列表不同的情况有以下三种:
      1、类型不同
      2、个数不同
      3、类型顺序不同
      
    重载与否只和以上条件有关,和其他(修饰符、返回值类型)都无关

方法的重写:

   在有子父类关系的类中,出现了子类的方法和父类方法声明一致,但是方法体不太一样的方法
       重写要求方法名相同,参数列表也相同
       重写还和其他条件(修饰符、返回值类型)有关

10.权限修饰符

10.1 权限范围

image-20210811093710436

10.2 什么是权限修饰符
什么是权限修饰符,可以修饰类中的成员(成员变量,成员方法和构造方法),同时也可以修饰类作用是规定修饰的内容所使用的范围,范围是在类中,还是包中,还是其他包中,最小的范围都是类的范围。
10.3 Java中有哪些修饰符
从最高到最低:public protected  默认不写(default) private
10.4 总结

public权限修饰的成员,可以在当前模块中使用,是最大的权限

private权限修饰的成员,可以在本类中使用,是最小的权限

默认不写权限修饰的成员,只能在当前包使用,出了当前包无法使用

protected修饰的成员,使用的范围在:当前包+其他包的子类

10.3 Java中有哪些修饰符

从最高到最低:public protected  默认不写(default) private
10.4 总结

public权限修饰的成员,可以在当前模块中使用,是最大的权限

private权限修饰的成员,可以在本类中使用,是最小的权限

默认不写权限修饰的成员,只能在当前包使用,出了当前包无法使用

protected修饰的成员,使用的范围在:当前包+其他包的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值