java继承和多态

继承:继承和多态是java重要的一部分,继承是一种减少重复程序代码的机制,将多个类相同的实例变量和方法(还有构造函数)抽象成一个类中所拥有的,这个类就是前面那几个类的父类。 这么说有点...
从另一方面说,如果一个类继承了一个类,那么它就继承了那个类的实例变量和方法(权限允许的话)。
怎么才能确定谁是父类和谁又是它的子类呢?
书里面是用了“is a”方法,即:葡萄酒是酒,那么葡萄酒类就是酒这个类的子类,酒类就是父类;白葡萄酒是葡萄酒,即白葡萄酒类是葡萄酒的子类,子类的子类也能通过“is a”方法,即白葡萄酒也是酒。
例如:类A继承类b;class A extends B;那么A就会拥有类B的实例变量和方法(包括构造函数)。
子类A也可以覆盖从类B继承下来的方法,要求子类方法要与父类方法的方法名,参数都相同,且返回类型要兼容(即返回类型相同或者是该类型的子类)。覆盖的时候不可以降低方法的存取权限。
还有方法重载,重载与覆盖不同,重载的返回类型可以不同,可以改变方法的存取权限,参数也需要不同,与覆盖一样的是方法名是相同的。(参数不同,返回类型相同或不相同都是重载。
继承中的方法调用顺序是先在子类中调用该方法,若子类中没有该方法就向它的父类调用
,如果子类覆盖了该方法,就会调用覆盖后的方法;若调用完子类的方法,还想调用父类中的同名方法,就要用supper来调用,例如:supper.方法名();
多态:多态是建立在继承的基础上的,当运用多态时,引用类型可以是实际对象类型的父类;就是可以使用父型作为方法的参数和返回类型或者是数组的类型。这样的话在扩充程序时你只需要新建一个集成父类的新建类,不需要修改已经编写好的代码。例如
class A{
void go(A a){               //A中的方法go,参数是A的实例。
System.out.printf(“duo tai ”);
} }
class B extends A{ //B会继承A类的go方法,
}
class F extends B { //F又会继承B类所继承的方法。
}
class C_Test{
public static void main(String[]args){
A d=new B(); //引用类型为类A的,所引用的确实B类对象
B b=new B();
F f=new F();
d.go(f); ,//引用变量d调用go方法,参数是F类的实例,则会执行F类中的go方法
d.go(b) //引用变量d调用go方法,参数是B类的实例,则会执行B类中的go方法
} } //所以说go这个方法可以取用任何一种A,只要所传入的是A子类的对象,方法都能运行,
如果需要不同于父类A的输出,只要在子类中将继承下来的父类方法覆盖即可,
例如:void go(A a){
System.out.printf(“duo tai ”);} //是覆盖还是重载的关键在于参数(入参)和返回类型。
如果子类中定义的是父类方法的重载,那在调用时不会调用重载的方法而会调用父类中的方法。
编写程序代码时将参数声明成父类类型,可以在运行的时候传入任何的子类对象,运行结果是什么就看你在子类中是否覆盖父类中的该方法,若覆盖了就是子类覆盖方法中的结果,若没有则是父类方法中的结果。

猜你喜欢

转载自201610222643.iteye.com/blog/2335727