一、Inheritance
继承,是面向对象三大特征之一,也是实现软件复用的重要手段。 Java的继承支持单继承(接口除外),即每个子类只有一个直接父类
在Java中,继承的关键字是extends。实现继承的类被称为子类,被继承的类称为父类,也可称之为基类、超类。父类与子类的关系,是一种一般与特殊的关系,比如动物和猫。
1、一旦发生继承关系,子类将获得父类的全部属性和方法(除了私有的),值得指出的是: Java的子类不能获得父类的构造器。
2、如果定义一个类时并未显式指定这个类的直接父类,那么这个类默认扩展 java.lang.object 类,所以我们建的类虽然没有定义equals( )和hashCode( )方法,但是却可以使用这2个方法(本篇的代码就不做介绍了)
3、大部分时候,子类总是以父类为基础,额外增加新的属性和方法。如果子类认为父类的方法不能满足当前行为,则可以进行方法重写(注意与方法重载进行区别),也称方法覆盖(Override)。
方法重写的要求如下:
两同:方法名相同、形参列表相同
两小:子类方法返回值类型应比父类的小或相等,子类抛出的异常类应比父类的小
一大:子类方法的访问权限应比父类的更大或相等
需要指出的是,重写方法和被重写方法要保持一致性,即要么都是类方法,要么都是实例方法。
关于方法重写的每个要求就不一一示例
相关代码如下:
package com.Inheritance;
/**************************************************
* simply access the variable and methods from superclass
*
* @author: 瘋叻ハ.兩
* @revision: 1.0
* @create-time: 2011-9-4 下午07:01:05
***************************************************/
public class InhertanceTest1 {
public static void main(String[] args) {
// construct a Manager object, ①、but it can't invoke(调用) Employee's construction
// Manager bo = new Employee("Mike", 28, 6000); it's a wrong way
Manager boss = new Manager("John", 35, 8000);
// ①、invoke the Employee's filed by boss
System.out.println(boss.getName());
boss.setBonus(500);
// it's a new way for me to achieve the Polymorphism, so i want to share for you ahead of time
Employee[] em = new Employee[3];
em[0] = boss;
em[1] = new Employee("Mike", 25, 4000);
em[2] = new Employee("Kevin", 28, 5000);
// print out everyone's salary
for(Employee e : em){
System.out.println(e.getName() + "的工资是:" + e.getSalary());
}
}
}
class Employee {
/**
* @param name the employee's name
* @param age the employee's age
* @param salary the employee's salary
*/
private String name;
private int age;
private int salary;
public Employee(String name, int age, int salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
// Getters
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getSalary() {
return salary;
}
}
class Manager extends Employee{
/**
* @param bonus the manager's bonus(奖金)
*/
private int bonus;
public Manager(String name, int age, int salary){
// invoke superclass's constructor
super(name, age, salary);
bonus = 0;
}
public void setBonus(int bonus){
this.bonus = bonus;
}
public int getBonus(){
return bonus;
}
// ③、override method depend on itself
@Override
public int getSalary(){
int baseSalary = super.getSalary();
return bonus + baseSalary;
}
}
运行结果:
John
John的工资是:8500
Mike的工资是:4000
Kevin的工资是:5000
分 析: 看代码注释
如果父类中的方法被private修饰,则该方法归父类私有,对其子类是隐藏的。所以子类并不能访问该方法,也就无法重写该方法。如果子类中定义了一个与父类私有方法一样方法名、形参和返回值的方法,那么它属于什么呢?
且看代码:
package com.ExtendstTests;
/**************************************************
*
* @author: 瘋叻ハ.兩
* @create-time: 2011-5-29 下午08:19:23
* @revision: 1.0
* @purpose:
*
***************************************************/
class Parent2{
private void say(){
System.out.println("此为父类对象的私有方法,它只能被同一个类里的父类的对象调用");
}
void run(){
this.say();
}
}
public class Sun2 {
// 因为不是重写,所以可以被static修饰却不报错
static void say(){
System.out.println("此非重写父类方法");
}
public static void main(String[] args) {
Sun2.say();
new Parent2().run();
}
}
运行结果:
此非重写父类方法
此为父类对象的私有方法,它只能被同一个类里的父类的对象调用
分 析 : 看代码注释
二、super
在上述代码中,如果你是个新手,你会看到有个super关键字。它代表什么呢,敬请期待个人小结与this的区别
分享到:
相关推荐
本篇文章将深入探讨“Java起航——类的初始化历程”,并结合JVM(Java虚拟机)的工作原理,帮助你更好地理解这个过程。 首先,我们需要了解Java类的生命周期,它包括加载、验证、准备、解析和初始化五个阶段。当一...
让追求承载梦想起航--广电网络演讲稿.doc
度QDII基金投资策略:岁寒添防御,征途再起航-0107-国金证券-45页.pdf
交通运输行业2021年投资策略:拨云见日,重新起航-20201230-长城证券-31页.pdf
有色金属行业深度报告:2019,黄金新周期的起航-20190624-银河证券-31页.pdf
shopex 商务系列模板-梦想起航-ShopEx4[1].8
2020学年高中历史第4单元工业文明冲击下的改革第14课日本近代化的起航--明治维新随堂练习.pdf
软体家居行业深度报告:软体家居内外兼修,格局优化看好龙头扬帆起航-20210302-浙商证券-14页.pdf
佩蒂股份 - 宠物咬胶领军者,国内扬帆起航-210111_宠物行业研究报告
证券行业科创板专题报告之二:推动科技创新成果转化,新时代专业投行起航-20190407-中银国际-42页.pdf
中银证券-计算机行业数据要素深度一:拐点将至,数据要素全面起航-230528.pdf
生物医药行业专题报告:科创板撬动万亿级医药创新市场,中国版“纳斯达克”拔锚起航-0331-平安证券-35页.pdf
中小盘:宠物医疗再整合,连锁超千店的新瑞鹏集团起航-国盛证券-190127_宠物行业研究报告.pdf
【起航-远望-杜跃进.pdf】的文件主题主要围绕着移动应用安全和相关的信息安全领域展开,尤其强调了在快速发展的互联网环境中,如何应对业务、数据、云、移动等方面的安全挑战。以下是根据标题、描述和标签提取的相关...
中金公司发布的这份科技行业报告详细探讨了AIoT(人工智能物联网)指令集的发展趋势,特别是聚焦于开源指令集RISC-V的潜力。RISC-V作为一种新兴的开源指令集,被预期将革新物联网处理器的设计模式,并有望引领处理器...
【蚂蚁金服】是金融科技领域的巨头,自2004年支付宝成立以来,它已发展成为一个包含多重业务和技术的综合平台。蚂蚁金服的核心优势在于其...未来,它将在去金融化趋势下,依靠技术驱动,继续在新的市场领域中扬帆起航。
非银金融行业金融控股公司的国际比较与启示:动能切换、直融之机、混业启幕、金控起航-190422.rar
### 保险行业专题:新能源车险,星辰大海扬帆起航 #### 1. 新能源车险市场概览 新能源汽车保险作为一个新兴且快速发展的领域,在近年来受到了广泛关注。随着全球范围内对环境保护意识的提高以及政策的支持,新能源...