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());}}