以太坊开奖(326681.com)_类和工具之继续
发表时间:2020-12-27 浏览量:11
类和工具之继续
一. 什么是继续
继续就是子类继续父类的特征和行为,使得子类工具(实例)具有父类的实例域和方式,或子类从父类继续方式,使得子类具有父类相同的行为。
二. 继续的语法
关键字 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时,子类界说父类方式时,方式名和参数列表可变,返回值类型不可变。
六:继续的优点
在面向工具语言中,继续是必不可少的、异常优异的语言机制,它有如下优点:
- 代码共享,削减建立类的工作量,每个子类都拥有父类的方式和属性;
- 提高代码的重用性;
- 子类可以形似父类,但又异于父类;
- 提高代码的可扩展性,实现父类的方式就可以“为所欲为”了。
- 提高产物或项目的开放性。
你的激励让我更有动力
赞赏
0人举行了赞赏支持
0
珍藏