继承 重载 重写 多态 不定参数

本文详细介绍了Java编程中的继承概念,包括子类对象构造问题和引用变量指向问题。接着讨论了重载的规则,并通过案例进行说明。重写的概念被阐述,包括改良性与颠覆性重写,以及如何在子类中调用父类的被重写方法。此外,文章还探讨了多态的重要性及其应用,最后提到了不定参数在处理参数数量不确定场景中的作用。

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

继承

这里写图片描述

1. 继承环境下的子类对象构造问题

Animal.java
这里写图片描述
Tiger.java
这里写图片描述
【即】得先打扫(构造)父类再打扫(构造)子类

2. 继承环境下的引用变量指向问题

这里写图片描述
① 父类引用变量可以指向子类对象(萎缩效应)
Tiger a=new Tiger();//年轻人用iPhone6
Animal a=new Tiger();//中年人用iPhone6
Object a=new Tiger();//老年人用iPhone6
② 子类引用变量不能指向父类对象
Tiger a=new Animal();//×动物不可以当成老虎

重载

参数不同则构成重载,具体规则如下:

  1. 参数数量不同
  2. 对应参数位置的参数数据类型不同

案例:

int add( int a , int b);
int add( int a, int b, int c);
int add(int a, double c);
int add( int a, int d); [参数名不列入重载考虑范围,构成重名]
void add( int a, int b); [返回值不列入重载考虑范围,构成重名]

编译器本质上是不允许方法重名的,这在面向对象编程语言中也是这样的, 在程序员的呼吁中,编译器的开发者提供了能够名字重复使用的机制,但编译器最终将把方法名做修正,比如:

int add( int a , int b); add_int_int
int add( int a, int b, int c); add_int_int_int

重写

重写的模式从内容实现上分为2种:

  1. 改良性,补充型重写:对父亲提供的方法内容进行补充。(保留父类方法)
  2. 颠覆性重写:完全否定父亲所提供的方法内容,彻底改写。

重写不是覆盖掉父亲的方法,父亲该方法在子类内部还是存在的。在内存中,体现为子类和父类两个同签名方法共存的现象。在子类方法中,可以通过super.来显示调用父类被重写的方法,如果不用super. ,则表示调用子类的该重写方法。

继承环境下子类方法设置的可能情况:

Class A{
void sayHello(int a, int b)
}

Class B extends A{
Void sayHello(int a, int b){ //在子类中,出现和父类方法同签名,则为重写
……..
}

Void tellYouSomething(int a){ //方法名和所有父类方法均不同,称为子类自定义新方法
}

Void sayHello(int a, int b, int c){ //子类对父类方法的签名做部分改造,叫做跨类重载
}
}

补充:
这里写图片描述
这里写图片描述

这里写图片描述

多态

这里写图片描述
Tiger.java
这里写图片描述
chineseTiger.java
这里写图片描述
Tester.java
这里写图片描述

多态用法举例
这里写图片描述
【即】为今后变成框架代码提供了可能,适合用来编写通用底层代码

不定参数

double add(int a, int b, double... m){  //m是一个double型数组 
         double sum=a+b;         
         for(int i=0;i < m.length;i++)
             sum=sum+m[i];       
         return sum;         
}

不定参数是为了方便参数数量不确定的情况,以提高方法签名的高度兼容性。
m最终将会被理解为 double[], 一个方法签名的不定参数只能有一个,而且是最后一个。

举例:

public class VariArgs {  

    public static void main(String[] args) {  
        test();  
        test("aaa");  
        test("aaa", "bbb");  
        test("aaa", "bbb", "ccc");  
    }  

    public static void test(String... args) {  
        System.out.println(args.getClass());  
        for (String arg : args) {  
            System.out.println(arg);  
        }  
    }  
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值