Java起航 ---- 继承

本文详细介绍了Java中的继承概念,包括单继承特性、方法重写规则,并通过具体代码示例展示了如何利用继承来实现代码复用及多态。此外,还讨论了super关键字的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      一、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的区别

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值