Java 重写和重载

方法重写

返回值特性:子类重写父类方法,名字、参数一样,返回值必须是父类返回值的子类,编译会报错。

异常特性: 子类抛出的异常不能超出父类抛出的异常

访问级别: 子类方法的访问级别不能低于父类的访问级别

class Father{
    private String name;
    protected Father(String name){
        this.name = name;
    }

    protected Object setName(String name)throws Exception{
        this.name = name;
        return name
    }
}

class Son extends Father{

    private Son(String name) {
        super(name);
    }
    /*
	 * 子类的访问级别是   public > protected
     * 子类的返回值类型是 String < Object
     * 子类抛出的异常    IOException < Exception
     */
    public String setName(String name)throws IOException{
        return name;
    }
}
方法重载

相同的方法名称,不同的方法特征签名,返回值不属于重载的特征签名

方法特征签名: 参数类型、参数顺序、参数个数

//静态分派
class Person{
    protected String name = "Person";
}
class Human extends Person{
    protected  String name = "Human";
}
class Man extends Person{
    protected  String name = "Man";
}
class Wuman extends Person{
    protected  String name = "Wuman";
}
public class MethodOverLoad {
    public static void sayHello(Person person){
        System.out.println("Hello World : " + person.name);
    }
    public static void sayHello(Human person){
        System.out.println("Hello World : " + person.name);
    }
    public static void sayHello(Man person){
        System.out.println("Hello World : " + person.name);
    }
    public static void sayHello(Wuman person){
        System.out.println("Hello World : " + person.name);
    }

    public static void main(String[] args) {
        Person human = new Human();
        Person man = new Man();
        Person wuman = new Wuman();
		//这个属于静态分派,在编译时已经决定要调用的是哪一个方法
        sayHello(human);
        sayHello(man);
        sayHello(wuman);
    }
}

//动态分派
/**
  * 抽象动物类
  */
abstract class Animal{
    protected String name = "";
    protected abstract void sayHello
} 
/**
  * 子类Dog
  */
class Dog extends Animal{
   public Dog(){
       this.name = "Dog";
   }
    
   @Override
   protected void sayHello(){
       System.out.println(this.name);
   }
}
/**
  * 子类cat
  */
class Cat extends Animal{
 	
    public Cat(){
        this.name = "Cat";
    }
    
    @Override  
    protected void sayHello(){
        System.out.println(this.name);
    }
}


public class DynamicDispath{
    public static void main(String[] args){
        Animal dog = new Dog();
        Animal cat = new Cat();
        //动态分派,因为在编译期,是无法可dog的类型 只有在运行期间才能知道
        dog.sayHello();
        cat.sayHello();
    }
}

例子只是说明方法的参数类型.当方法的参数只有一个时,方法的调用顺序

即存在一个调用顺序char -> int -> long ->double ->
当没有基本类型就是继续找基本类型的包装类型
如果没有包装类方法,则调用包装类实现的接口的方法。
跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)内容概要:本文围绕跟网型逆变器的小干扰稳定性展开分析,重点研究其在电力系统中的动态响应特性及控制策略优化问题。通过构建基于Simulink的仿真模型,对逆变器在不同工况下的小信号稳定性进行建模与分析,识别系统可能存在的振荡风险,并提出相应的控制优化方法以提升系统稳定性动态性能。研究内容涵盖数学建模、稳定性判据分析、控制器设计与参数优化,并结合仿真验证所提策略的有效性,为新能源并网系统的稳定运行提供理论支持技术参考。; 适合人群:具备电力电子、自动控制或电力系统相关背景,熟悉Matlab/Simulink仿真工具,从事新能源并网、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 分析跟网型逆变器在弱电网条件下的小干扰稳定性问题;② 设计并优化逆变器外环与内环控制器以提升系统阻尼特性;③ 利用Simulink搭建仿真模型验证理论分析与控制策略的有效性;④ 支持科研论文撰写、课题研究或工程项目中的稳定性评估与改进。; 阅读建议:建议读者结合文中提供的Simulink仿真模型,深入理解状态空间建模、特征值分析及控制器设计过程,重点关注控制参数变化对系统极点分布的影响,并通过动手仿真加深对小干扰稳定性机理的认识。
### 方法重写与方法重载的概念 在 Java 编程语言中,方法重写(Override)方法重载(Overload)是实现多态的核心机制之一。方法重写指的是子类重新定义父类中已有的方法的行为,其目的是扩展或改变父类的功能[^1]。而方法重载则是在同一个类中通过相同的方法名称但不同的参数列表来提供多种功能实现的方式[^3]。 --- ### 方法重写的特征 方法重写的关键在于它发生在继承关系中,即当子类需要调整父类方法的具体行为时会使用到这一技术。具体来说: - 子类中的方法签名必须完全匹配父类中的方法签名,包括方法名以及参数列表[^2]。 - 返回类型可以是相同的或者协变返回类型(Covariant Return Type),这意味着如果父类方法返回 `Object` 类型,则子类可将其改为更具体的子类型如 `String` 或者其他派生自 `Object` 的类型[^4]。 下面是一个简单的例子展示如何进行方法重写: ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { // Method overriding here. System.out.println("Dog barks"); } } ``` --- ### 方法重载的特征 相比之下,方法重载并不涉及继承关系;而是指在同一类内部允许存在多个具有相同名字但是参数数量、顺序或是类型的差异使得编译器能够区分这些函数调用的情况。例如可以通过更改输入参数的数量或种类来进行方法重载操作。 以下是关于方法重载的一个实例演示: ```java public class Calculator { int add(int num1, int num2){ return num1 + num2; } double add(double num1, double num2){ // Overloaded method with different parameter types. return num1 + num2; } int add(int num1, int num2, int num3){ // Another overloaded version of 'add' taking three arguments instead of two. return num1 + num2 + num3; } } ``` --- ### 使用场景对比 #### 方法重写适用场合 - 当希望某个特定类的对象表现出不同于其超类所规定之默认动作的时候应该考虑采用方法重写策略^。 - 如果程序设计需求涉及到动态绑定(dynamic binding),那么通常也需要依赖于方法重写达成目标因为只有这样才可以确保运行时刻正确版本被调用出来^。 #### 方法重载适合情况 - 对于想要在一个类里针对不同数据形式执行相似逻辑处理的情形下非常适合运用方法重载^。 - 它有助于提高代码可读性维护便利度,因为它可以让开发者利用统一的名字表达一系列紧密关联的操作集合^。 --- ### 总结表格 | 特性 | 方法重写 (Override) | 方法重载 (Overload) | |-------------------|-------------------------------------|----------------------------------| | **发生位置** | 继承链路之中 | 同一类内 | | **方法签名一致性要求** | 必须一致 | 不必一致 | | **参数列表变化可能性** | 参数列表不可变更 | 可以有不同参数数目/类型 | | **访问修饰符约束** | 权限不能缩小 | 无特别限制 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值