【JavaSE】继承和多态

目录

一、继承

1、定义

2、语法

3、父类成员变量的访问

4、父类成员方法的调用 

5、构造方法

6、初始化

7、super关键字

8、继承的种类

9、protected关键字

10、继承与组合

11、举例

二、多态

1、概念

2、向上转型

3、重写

 4、发生多态的条件

5、举例


一、继承

面向对象的思想里提出了继承的概念,专门用来共性抽取,以此来实现代码的复用

1、定义

是面向对象程序设计过程中实现代码复用的重要手段,他允许在保持原有类特性的基础上,进行扩展,增加新功能,这样产生的类叫做子类,也叫派生类。继承主要解决的问题是,共性的抽取和代码的复用,父类也叫基类,子类也叫派生类

2、语法

class A extends B{


}

1.子类在继承父类后,必须有新的成员以体现于父类的不同

3、父类成员变量的访问

1,没有同名变量时

可以通过this.成员变量或者直接使用变量名进行访问 

【JavaSE】继承和多态_第1张图片

2、父类与子类里有同名的成员变量时 

可以通过super.成员变量

【JavaSE】继承和多态_第2张图片

4、父类成员方法的调用 

1、没有同名的成员方法时

可以通过this.成员方法,或者直接调用

【JavaSE】继承和多态_第3张图片

2、有同名的成员方法时

super.成员方法

【JavaSE】继承和多态_第4张图片

5、构造方法

1.当父类不自己提供构造方法时,由编译器自己提供,此时子类也可以由编译器默认提供 

2.当父类提供了代参或者不带参的构造方法时,此时父类必须提供构造方法,且必须在构造方法里先通过super关键字调用父类的构造方法来初始化,子类继承父类的那部分字段

【JavaSE】继承和多态_第5张图片

 要注意的时,在子类的构造方法里面,super调用父类的构造方法必须放在第一行

3.在构造对象时 ,先调用父类的构造方法,将继承父类的成员进行初始化,然后再第调用子类自己的构造方法,将子类新增的成员初始化完整

6、初始化

在类内部初始化时代码执行的顺序是:

先执行父类的静态代码块然后执行子类的静态代码块

接着执行父类里的实例代码块跟构造方法

最后执行子类里的实例代码块跟构造方法

要注意的是,静态代码块在实例多个对象时只会执行一次

7、super关键字

1、访问父类里的成员变量

super.变量名

2、访问父类里的成员方法

super.方法

3、调用父类的构造方法

super()

4、super只能在非静态的方法里面使用

8、继承的种类

1、单继承

class A {

……

}

class B extends A{

……

2、多层继承

class A {

……

}

class B extends A{

……

class C extends B{

……

}

3、不同类继承了同一个类

class A {

……

}

class B extends A{

……

class C extends A{

……

}

class D extends A{

……

}

9、protected关键字

首先他是一个访问修饰限定符,在类里面修饰成员,当一个变量被protected修饰时

1、在同一个类里可以访问

2、在同一个包里的不同类也可以访问

3、在不同包里的子类可以访问

当不同包里有一个类继承了这个类时,在这个子类就可以访问这个被protected修饰的变量

10、继承与组合

类似于C语言结构体里成员变量有另一个结构体变量

【JavaSE】继承和多态_第6张图片

与继承相比优先使用组合,组合与继承都可以实现代码的复用

11、举例

对于老师类与学生类,他们的共性是都要名字和年龄走路等,于是共性抽取将其作为父类,然后定义老师类与学生类时就可以直接去继承这个类,实现了代码的复用

【JavaSE】继承和多态_第7张图片

二、多态

1、概念

也是面向对象的一种思想 ,他是在具体完成某个行为时,不同对象所体现出了不同的状态

2、向上转型

所谓的向上转型就是在一个类继承了一个类时,父类的引用,引用了子类的对象,通俗来说就是new一个子类的对象,用父类的类型来接收

【JavaSE】继承和多态_第8张图片

一下三种情况都会发生向上转型

1、在方法里用父类类型来接收,传入时以子类对象传入

【JavaSE】继承和多态_第9张图片

2、在方法返回时,返回子类的对象,接收反回值时用父类的引用来接收【JavaSE】继承和多态_第10张图片 3、直接用父类的引用引用子类的对象 

【JavaSE】继承和多态_第11张图片

3、重写

方法重载是方法名相同,参数列表类型、个数、顺序不同 ,而方法重写是返回值相同,方法名相同,参数列表相同

【JavaSE】继承和多态_第12张图片

static、private、final修饰的方法不能重写、子类重写的方法的修饰限定符权限必须大于等于父类被重写的方法

 4、发生多态的条件

1、发生向上转型

2、完成方法重写

3、通过父类的引用调用重写的方法

这个过程会发生动态绑定,在编译时调用父类的方法,而在运行时调用子类的重写方法,也叫运行时绑定

5、举例

1、发生向上转型

【JavaSE】继承和多态_第13张图片

2、方法重写

【JavaSE】继承和多态_第14张图片 3、通过父类的引用调用重写的方法

【JavaSE】继承和多态_第15张图片

 此时main函数里调用了两个walk方法,此时就会发生多态

 

你可能感兴趣的:(Java,java,开发语言)