3.对象名表明对象的类型
3.试说明 null
、this
和 super
这三个变量的作用。
==========================================================================================================
null
代表空对象
this
代指类自身对象
super
代指父类对象
=========================================================================================
静态方法:编译后系统直接给静态方法分配内存,直到程序运行结束;因此静态方法调用更快
抽象方法:在此类中不必实现他,只是一个虚方法,所有实现可以到子类中去做;子类必须实现父类所有抽象方法。
最终方法:用来完成标准功能的方法,表示该方法无法在子类中被覆盖。
================================================================================
class super{
public float getNum(){return 3.0f;}
}
public class Sub extends Super{
}
将下列哪个方法写入上述代码第五行,会出现编译错误?(B )
A.public float getNum(){return 4.0f;}
//属于覆盖
B.public void getNum(){}
//‘com.company.Sub’ 中的 ‘getNum()’ 与 ‘com.company.Super’ 中的 ‘getNum()’ 冲突; 尝试使用不兼容的返回类型
//覆盖要求返回值与父类一致
C.public void getNum(double d){}
//属于重载
D.public double getNum(flloat d){return 4.0f;}
//属于重载
覆盖方法的调用原则:
(1)父类被覆盖的方法的声明必须要和子类的同名方法的声明完全匹配,才能达到覆盖的效果。
(2)覆盖的方法的返回值必须和被覆盖的方法的返回值一致。
(3)被覆盖的方法不能为private
,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖,因为修饰符为private的方法,子类不能从父类继承,所以覆盖也不存在了。
(4)当Java程序运行时,系统根据调用该方法的对象,来决定实际调用的是子类还是父类的方法。对于子类的一个对象,如果该子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。
(5)重写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。
(6)重写后的方法不能比重写的方法产生更多的例外,即抛出更多的异常。
方法重载要注意的几点:
(1)Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。
(2)参数类型的区分度一定要够,即参数类型、个数、顺序至少有一项不相同。例如不能是同一简单类型的参数,如int与long。
(3)方法的修饰符可以不相同。
(4)一个类的多个构造函数之间还可以相互调用,这可以通过关键字this来实现。需要注意的是,这个调用语句必须是整个构造函数的第一个可执行语句。
在一个类中不允许定义两个方法名相同,并且参数签名也完全相同的方法。因为假如存在这样的两个方法,Java虚拟机在运行时就无法决定到底执行哪个方法。
覆盖与重载的区别如下:
(1)方法的覆盖是子类和父类之间的关系,而重载是同一类内部多个方法间的关系
(2)方法的覆盖一般是两个方法间的覆盖,而重载时可能有多个重载方法;