java中继承的理解,为什么要继承,怎么使用继承

java中继承的理解,为什么要继承,怎么使用继承

继承

本章目标:

1.继承

1.1 什么是继承?

1.2 为什么要继承?

1.3 如何使用继承操作?

1.4 父类中哪些是子类所不能继承的?

2.super

2.1 子类如何访问父类的属性和方法?

2.2 super的三种结构

2.3 super()的应用及注意事项

3.重写

3.1 什么是重写?

3.2 为什么要重写?

3.3 什么情况下才能重写?

3.4 如何重写?

4.挑战:掌握继承状态下父类、子类构造方法、static代码块、代码块的执行顺序

具体讲解:

1.继承

1.1.什么是继承?

(1)现实生活中的继承

现实生活中继承指的是对象与对象的继承关系。

(2)程序中的继承

继承是面向对象编程(OOP)的三大特征之一。

继承的概念:

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

程序中的继承是指类与类之间的继承关系。

Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(或叫基类、超类)。

继承关系的梳理:

父类和子类的关系是一种一般与特殊(is-a)的关系。

举例:水果(Fruits)和苹果(Apple)的关系

苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。

1.2.为什么需要继承?

(1)提高代码的重用性。

(2)优化代码,方便修改。

(3)类与类之间产生了关系,是多态的前提。

1.3.如何使用继承操作?

(1)继承的格式

通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:

class 父类 {

}

class 子类 extends 父类 {

}

继承演示代码如下:

//员工类

class Employee{

private String name; //姓名

private int age; //年龄

private double salary = 5000.0; //薪水

public Employee(){}

public Employee(String name, int age, double salary){

this.name = name;

this.age = age;

this.salary = salary;

}

public double getSalary(){

return salary;

}

}

//经理类继承自员工类

class Manager extends Employee{

private double bonus; //奖金

public void setBonus(double bonus){

this.bonus = bonus;

}

}

//测试类

public class Test{

public static void main(String[] args){

Manager manager = new Manager();

double sal = manager.getSalary();

System.out.println(“继承的薪水为:” + sal);

}

}

1.4.父类中哪些是子类所不能继承的?

(1)私有化的,即用private修饰的成员变量和成员方法。

(2)构造方法。

(3)子类与父类不在同一个包中,父类使用默认访问权限的成员变量和成员方法。

1.5.继承的其他特点

(1)单继承

Java中只支持单继承,不支持多继承。

Java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。

为什么不支持多继承呢?

因为当一个类同时继承两个父类时,两个父类中有相同的方法,那么子类对象调用该方法时,运行哪一个呢?

(2)多重继承(继承体系)

Java支持多重继承,例如:

class A{}

class B extends A{}

class C extends B{}

多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。

(3)继承关系下,子类与父类的成员变量同名会有什么影响?

同名看实例化对象是哪个类就以哪个类中的成员变量值为准。

举例:如果new的是子类,则以子类中的值为准;

如果new的是父类,则以父类中的值为准。

(4)继承关系下,子类与父类的成员方法会有什么影响?

调用成员方法,先在子类中查找是否有该方法,有就执行,没有就去父类中查找执行。

父类中没有则直接报错。

2.super

2.1.子类如何访问父类的属性和方法?

(1)super.属性名

(2)super.方法名()

2.2.super的三种结构

(1)super.属性名

访问父类的属性: super.name;

(2)super.方法名()

访问父类的方法: super.print();

(3)super();

调用父类构造方法:super(name,age);

注意:该句只能出现在子类构造方法中的第一行。

2.3.super()的应用及注意事项

(1)super()出现在子类构造方法,表示调用父类的构造方法。

(2)如调用父类带参构造方法,则用:super(参数列表);

(3)super()只能出现在子类构造方法中的第一行。

2.4.super与this

3.重写

注意:重写的前提是类之间具有继承关系。

3.1.什么是重写?

重写也称覆盖,是在继承关系下,子类对父类方法代码的修改。

举例:动物类(Animal)中的吃方法(eat),有些动物吃草,有些动物吃肉,都是吃的功能,但是动物不一样,实现的方式也不一样。

3.2.为什么要重写?

(1)父类已具有某个功能的方法,子类假如有相同功能的方法,使用重写的方式更加便利,不会造成子类既继承得到了父类的这个功能,又自己拥有一个同样的功能而方法名却不一样的尴尬境地。

(2)继承是多态的前提,重写方法也是为了多态的扩展性的。

3.3.什么情况下才能重写?

当子类跟父类拥有相同的功能,但是实现方式不同时,子类重写父类的方法即可。

3.4.如何重写?

方法的重写要遵循“两同两小一大”的原则:

两同:方法名和参数列表必须相同

两小:返回值类型、声明异常 比(被重写的)父类的小(或一样)

一大:访问修饰符比(被重写的)父类的大(或一样)

示例:

public class Father {

public Father method(){

return new Father();

}

}

public class Sun extends Father {

@Override

public Sun method() { //两同:方法名和参数列表相同

// TODO Auto-generated method stub

return new Sun();

}

}

4.挑战:掌握继承状态下父类、子类构造方法、static代码块、代码块的执行顺序

执行顺序如下:

(1)父类的静态代码块

(2)子类的静态代码块

(3)父类的代码块

(4)父类的构造方法

(5)子类的代码块

(6)子类的构造方法

父类属性 > 父类构造方法 > 子类属性 > 子类构造方法

相关推荐

Windows 11屏幕键盘怎么关闭?如何彻底禁用?
365bet365用址

Windows 11屏幕键盘怎么关闭?如何彻底禁用?

📅 07-18 👁️ 4251
高招s忍上架多长时间更新一次?(高招s忍上架顺序)
在线365bet盘口

高招s忍上架多长时间更新一次?(高招s忍上架顺序)

📅 07-11 👁️ 3792
十大最经典的卡通动物形象 最为经典的卡通动物形象
365bet365用址

十大最经典的卡通动物形象 最为经典的卡通动物形象

📅 07-07 👁️ 3551