解决了程序的扩展问题。
一、方法覆盖(方法重写)
1、方法覆盖(方法重写)
在类的继承体系结构中,如果子类中出现了与父类中有同原型的方法,那么认为子类中的方法覆盖了父类中的方法(也称为方法重写);
通过子类的实例调用被覆盖的方法时,将总是调用子类中的方法,而父类中的方法将被隐藏。
举例2、方法覆盖(方法重写)和方法重载的区别
- 方法覆盖出现的前提条件之一是必须有继承发生的情况下,而且要求父类和子类中的方法必须同原型;
- 方法重载时,继承并不是必需的,它只要求方法名称相同,而参数列表则必须不同,换言之,各方法的原型其实是不同的。
二、引用转型
基类的引用可以指向派生类的对象,如:
BaseClass obj = new DerivedClass();
但是派生类的引用则不可以指向基类的对象,如:
DerivedClass obj = new BaseClass();
这样的语句将引发错误。
示例
三、多态
同一个对象,使用方法体现出不同的结果。
同一个实现接口,使用不同的实例而执行不同操作。
父类的引用指向哪个类的实例就调用哪个类中的方法;
同样是使用父类的引用,调用同一个名称的方法,却可以得到不同的调用结果,这就是Java中的多态,即:同一函数,多种形态。
1、静态多态(方法重载)
- 静态多态也称为编译时多态,即在编译时决定调用哪个方法;
- 静态多态一般是指方法重载;
只要构成了方法重载,就可以认为形成了静态多态的条件; - 静态多态与是否发生继承没有必然联系。
2、动态多态(方法重写)
- 动态多态也称为运行时多态,即在运行时才能确定调用哪个方法;
- 形成动态多态必须具备以下条件:
1.必须要有继承的情况存在;
2.在继承中必须要有方法覆盖;
3.必须由基类的引用指向派生类的实例,并且通过基类的引用调用被覆盖的方法;
由上述条件可以看出,继承是实现动态多态的首要前提。
3、抽象类和接口
四、final关键字
final:最终的,不可修改的。
final修饰变量、方法和类1、final修饰变量
如果将某个变量修饰为final,那么该变量就成为常量,常量在声明时必须初始化。
一般语法:
[访问权限] final 数据类型 常量名 = 值;
final double PI = 3.14159;
PI成为常量,其后任何试图对PI进行赋值的语句都将报错;
2、final修饰方法
如果将某个成员方法修饰为final,则意味着该方法不能被子类覆盖。如果在派生类中出现同原型的方法,将会报错。
一般语法:
[访问权限] final 返回值类型 方法名(参数列表) {
……
}
public final void fun() {
……
}
3、final修饰类
如果将某个类修饰为final,则说明该类无法被继承,任何类想继承于该类都将报错。
一般语法:
[访问权限] final class 类名 {
成员列表
}
public final class MyClass {
……
}
网友评论