java中继承的理解,为什么要继承,怎么使用继承 您所在的位置:网站首页 java语音是什么意思 java中继承的理解,为什么要继承,怎么使用继承

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

2024-06-15 23:55| 来源: 网络整理| 查看: 265

继承 本章目标: 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)子类的构造方法

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有