当前位置: 代码迷 >> Java面试 >> java面试例题惑 之 继承、多态、重载、重写
  详细解决方案

java面试例题惑 之 继承、多态、重载、重写

热度:751   发布时间:2016-04-17 18:28:21.0
java面试题解惑 之 继承、多态、重载、重写
继承、多态、重载、重写
继承
java中有三种类:类,抽象类,接口,他们的继承关系是:
1,类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
2, 抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
3, 接口只能继承(extends)接口。

继承的约束:
1. 类和抽象类都只能最多继承一个类,或者最多继承一个抽象类,并且这两种情况是互
斥的,也就是说它们要么继承一个类,要么继承一个抽象类。
2. 类、抽象类和接口在继承接口时,不受数量的约束,理论上可以继承无限多个接口。
当然,对于类来说,它必须实现它所继承的所有接口中定义的全部方法。
3. 抽象类继承抽象类,或者实现接口时,可以部分、全部或者完全不实现父类抽象类的
抽象(abstract)方法,或者父类接口中定义的接口。
4. 类继承抽象类,或者实现接口时,必须全部实现父类抽象类的全部抽象(abstract)方
法,或者父类接口中定义的全部接口。

继承可以实现类的复用,除了继承,采用组合方式也可以实现类的复用。
所谓组合就是把原有类定义为新类的一个属性,通过在新类中调用原有类的方法来实现复用
public class Sub {private Parent p = new Parent();public void doSomething() {// 复用Parent类的方法p.method();// other code}}class Parent {public void method() {// do something here}}

多态
//汽车接口interface Car {// 汽车名称String getName();// 获得汽车售价int getPrice();}// 宝马class BMW implements Car {public String getName() {return "BMW";}public int getPrice() {return 300000;}}// 奇瑞QQclass CheryQQ implements Car {public String getName() {return "CheryQQ";}public int getPrice() {return 20000;}}// 汽车出售店public class CarShop {// 售车收入private int money = 0;// 卖出一部车public void sellCar(Car car) {System.out.println("车型:" + car.getName() + " 单价:" + car.getPrice());// 增加卖出车售价的收入money += car.getPrice();}// 售车总收入public int getMoney() {return money;}public static void main(String[] args) {CarShop aShop = new CarShop();// 卖出一辆宝马aShop.sellCar(new BMW());// 卖出一辆奇瑞QQaShop.sellCar(new CheryQQ());System.out.println("总收入:" + aShop.getMoney());}}

运行结果:1. 车型:BMW 单价:300000
2. 车型:CheryQQ 单价:20000
3. 总收入:320000

多态是在继承的基础上实现的,将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑定和后期绑定两种。下面解释一下它们的定义:
1. 前期绑定:在程序运行之前进行绑定,由编译器和连接程序实现,又叫做静态绑定。
比如static方法和final方法,注意,这里也包括private方法,因为它是隐式final的。
2. 后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动
态绑定,或者运行时绑定。除了前期绑定外的所有方法都属于后期绑定。
多态就是在后期绑定这种机制上实现的。


重载、重写(overloading,overriding)
重写,英文名是overriding,是指在继承情况下,子类中定义了与其基类中方法具有相同
型构的新方法,就叫做子类把基类的方法重写了。这是实现多态必须的步骤。
重载,英文名是overloading,是指在同一个类中定义了一个以上具有相同名称,但是型构
不同的方法。在同一个类中,是不允许定义多于一个的具有相同型构的方法的。
  相关解决方案