兴唐Java技术公开课(继承与多态)

继承


继承是面向对象中极为重要的特性,目的是使代码复用以及使其易于维护。

语法:


//class <子类> extends <父类>

子类根据父类的访问控制符可以继承父类中的某些变量和方法,也可以自己添加新的变量和方法。此外,Object是所有类的父类,所有类都继承自Object类。


当类被final关键字修饰后,它不能被继承,例如Void,String等类。


子类必须调用父类的构造方法,如果父类有一个无参的构造方法,无论是显示还是隐式,子类中没有调用其他构造方法的构造方法,会隐式调用父类中的无参构造方法。


如果父类没有无参构造方法,那么在子类的构造方法中必须直接或间接调用父类的构造方法,且该语句必须放在子类构造方法有效语句的第一行。


当子类中定义的成员变量与父类中的成员变量同名时,子类的变量会覆盖父类的变量,称为隐藏了父类的变量,此时父类的变量无法被子类继承,若要调用,可使用super关键字。


重写


子类继承父类的方法后可能会需要该方法的实现与父类不同,这就需要重写方法:

@Override
public void Shut(){
    //.....
}

在子类中的方法上方加@Override,即完成了重写。

调用子类中的该方法时调用的是被重写后的方法。

若要调用未被重写的方法,需要使用super关键字来完成调用。

重写方法时,方法名和参数列表必须与父类中的方法一致。若返回值为基本数据类型,则重写方法返回值需一致,若返回值为引用数据类型,则重写方法返回值需一致或是父类返回值的子类。

重写方法的访问权限必须等于或大于原方法的访问权限,不能缩小访问权限。

父类的静态方法和final修饰的方法只能被继承,不能被重写。

重写父类的非静态方法后,不能加staitc修饰。


多态


Human student = new Student();

其中Student类是Human类的子类。

父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现出不同的行为特征,这就是多态。

Java引用变量有两种类型,分别是编译时类型和运行时类型:编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象。如果编译时类型和运行时类型不一致,就可能出现所谓多态。

将子类实例化付给父类变量,称为上转型对象。上转型对象调用的变量无论是否被子类覆盖,所调用的都是父类的变量。而调用被子类重写的方法,所调用的是被重写后的方法。

使用强制换将上转型对象转换为他的子类,称为对象下转型,此后可以通过该变量调用子类新增的以及继承的成员变量和成员函数。

注意由父类创建的对象不能下转型为子类。

猜你喜欢

转载自blog.csdn.net/t61789/article/details/80384364