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

继承

这里写图片描述

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);  
        }  
    }  
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章