一. 什么是继续

继续就是子类继续父类的特征和行为,使得子类工具(实例)具有父类的实例域和方式,或子类从父类继续方式,使得子类具有父类相同的行为。

二. 继续的语法

关键字 extends 解释正在组织的新类派生于一个已存在的类。

public class Employee {
    private String name;
    private double salary;
    private Date hireDay;
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month, day);
        hireDay = calendar.getTime();
    }
    public String getName() {
        return name;
    }
    //more method
   ......
}

只管 Employee 类是一个超类,但并不是由于它位于子类之上或者拥有比子类更多的功效。恰恰相反,子类比超类拥有的功效加倍厚实。在 Manager 类中,增加了一个用于存储奖金信息的域,以及一个用于设置这个域的方式:

public class Manager extends Employee{//extends继续Employee类
    ...
    private double bonus;
    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
}

然而,只管在 Manager 类中没有显式地界说 getName 和 getHireDay 等方式,但属于 Manager 类的工具却可以使用它们,这是由于 Manager 类自动地继续了超类 Employee 中的这些方式。同样,从超类中还继续了 name、salary 和 hireDay 这 3 个域。这样一来,每个 Manager 类工具就包含了4个域:name、salary、hireDay 和 bonus。

在通过扩展超类界说子类的时刻,仅需要指出子类与超类的不同之处。因此在设计类的时刻,应该将通用的方式放到超类中,而将具
有特色用途的方式放在子类中,这种将通用的功效放到超类的做法,在面向工具程序设计中十分普遍。

然而,超类中的有些方式对子类 Manager 并不一定适用。例如,在 Manager 类中的 getSalary 方式应该返回薪水和奖金的总和。为此,需要提供一个新的方式来笼罩(override)超类中的这个方式:

@Override
public double getSalary() {
    return salary + bonus;//won't work
}

然而,这个方式并不能运行。这是由于 Manager 类的 getSalary 方式不能直接地接见超类的私有域。也就是说,只管每个 Manager 工具都拥有一个名为 salary 的域,但在 Manager 类的 getSalary 方式中并不能够直接地接见 salary 域。只有 Employee 类的方式才能够接见私有部门。若是 Manager 类的方式一定要接见私有域,就必须借助共有的接口,Employee 类中的共有方式正式这样一个接口。

@Override
public double getSalary() {
    return super.getSalary() + bonus;
}
super 关键字有两个用途:一是挪用超类的方式,二是挪用超类的组织器。
super 不是一个工具的引用,不能将 super 赋给另一个工具变量,它只是一个指示编译器挪用超类方式的特有关键字。

由于 Manager 类的组织器不能接见 Employee 类的私有域,以是必须行使 Employee 类的组织器对这部门私有域举行初始化,我们可以通过 super 实现对超类组织器的挪用。使用 super 挪用组织器的语句必须是子类组织器的第一条语句。

三. 继续初始化历程

public class Animal {
    public Animal() {
        System.out.println("--Animals--");
    }
    public static int printInit(String s) {
        System.out.println(s);
        return 30;
    }
}

public class Bird extends Animal {
    private static int B = Animal.printInit("static Bird region init");
    public Bird(){
        System.out.println("--Bird--");
    }
    }

public class Parrot extends Bird {
    public Parrot(){
        super();
        System.out.println("--Parrot--");
    }
    public static void main(String[] arg) {     
        Parrot parrot = new Parrot();
    }
}

运行效果:

,

以太坊高度

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,
--Animals--
--Bird--
--Parrot--

四. 继续的分类

纯继续关系是纯粹的“is-a”(是一种)关系,由于一个类的接口已经确定了它应该是什么。继续可以确保所有的导出类具有基类的接口,且绝对不会少。基类可以吸收发送给导出类的任何新闻,由于二者有着完全相同的接口。

五. 继续的特征

    * Java 语言的继续是单继续,不允许一个类继续多个父类。
    * java支持多层继续(继续系统)。
    * 子类和父类是一种相对观点。 
            *   备注:顶层父类是Object类,所有的类默认都继续Object类。   

1、继续后的特点---成员变量:

    1. 子类只能获取父类非私有成员
    2. 子父类的成员变量的名字不一样时,直接获取父类的成员变量
    3. 子父类中成员变量名字是一样的
                * 就近原则,谁离我近我就用谁
                * 若是有局部变量就使用局部变量
                * 若是没有局部变量,有子类的成员变量就使用子类的成员变量
                * 若是没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
* 备注:父类中的成员变量是非私有的,子类才可以直接接见。若父类中的成员变量私有了,子类不能直接接见的。
               通常编码时,我们一样平常遵照封装的原则,可以在父类中提供公共的setXxx()和getXxx()方式。

例如:

public class ExtendsDemo2 {
    public static void main(String[] args) {
        Kid k = new Kid();
        k.show();
    }
}
class Dad{
    String name="大葱";
}
class Kid extends Dad{
    String name="二葱";
    public void show() {
        String name = "三葱";
        System.out.println(super.name);
        System.out.println(this.name);
        System.out.println(name);
    }
}

2:继续后的特点---成员方式:

    1. 子父类的成员方式的名字不一样时,直接获取父类的成员方式
    2. 子父类中成员方式名字是一样的
            * 成员方式重名---重写(Override)
            * 方式重写:子类泛起于父类一模一样的方式时(返回值类型,方式名和参数列表都相同),会泛起笼罩效应
                             也称为重写或者复写。声明稳定,重新实现。
            *重写的应用
               子类可以凭据需要,界说特定于自己的行为,即沿袭了父类的功效名称,又能凭据子类的需要重新实现父类
               的方式,从而举行扩展增强。
            * 方式额重载:在一个类中,有多个重名的方式,然则其参数不一样
             (参数的个数,参数的类型,参数的顺序),和返回值无关
备注:
           1.子类方式重写笼罩父类方式时,必须保证权限大于即是父类的权限。
           2.子类方式重写父类方式时,返回值类型,方式名和参数列表必须一模一样。
                        在没有使用@Override时,子类界说父类方式时,方式名和参数列表可变,返回值类型不可变。

六:继续的优点

在面向工具语言中,继续是必不可少的、异常优异的语言机制,它有如下优点:

  • 代码共享,削减建立类的工作量,每个子类都拥有父类的方式和属性;
  • 提高代码的重用性;
  • 子类可以形似父类,但又异于父类;
  • 提高代码的可扩展性,实现父类的方式就可以“为所欲为”了。
  • 提高产物或项目的开放性。