继承
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();//×动物不可以当成老虎
重载
参数不同则构成重载,具体规则如下:
- 参数数量不同
- 对应参数位置的参数数据类型不同
案例:
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种:
- 改良性,补充型重写:对父亲提供的方法内容进行补充。(保留父类方法)
- 颠覆性重写:完全否定父亲所提供的方法内容,彻底改写。
重写不是覆盖掉父亲的方法,父亲该方法在子类内部还是存在的。在内存中,体现为子类和父类两个同签名方法共存的现象。在子类方法中,可以通过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);
}
}
}