【java面向对象】再谈继承

概念

这里写图片描述

what?

一个对象直接使用另一个对象的属性和方法

why?

能快捷地开发出新的类,而不需要再编写相同的代码

how?

成员字段和成员方法的继承是常用的两种继承。
成员字段的继承:
这里写图片描述
代码分析:
Student类继承了Person类的“姓名”和“年龄”字段,同时自己增加了“学校”字段。这些都能被自己调用。
成员方法的继承:
这里写图片描述
代码分析:
Student类继承了Person类的方法method(),所以无需声明可直接调用。

访问修饰符

有时父类并不想所有的成员都能被子类继承,那就可以通过访问修饰符来限制继承和可访问权限。
public:完全开放
这里写图片描述
代码分析:
子类直接调用了父类中的“x”字段。

Private:类的私有成员只能被这个类的方法直接访问
这里写图片描述
代码分析:“x”字段只能被A类中的方法调用,不能被B类中的对象调用

protected:只允许其子类继承
这里写图片描述
代码分析:
因为x的修饰符为protected,所以其能被student类调用。

default:默认的类成员,同一各包中的其他类可以访问。
这里写图片描述
代码分析:这是默认类型。子类可直接继承

方法的覆盖

有些父类中的方法并不适合子类,那子类就可以通过重新定义同名的方法来实现对父类方法的覆盖。
这里写图片描述

super关键字

当子类覆盖了父类的方法后,如果还想调用父类的字段和方法,就可以用到super
这里写图片描述

几种不能使用方法覆盖的情况

有三种方法不能被子类覆盖:static方法、final方法、final类中的方法。

static方法

这里写图片描述
代码分析:因为父类中的talk()方法用了static修饰,所以子类中不能覆盖
这里写图片描述

final方法

同理,如果把上面代码中的static替换为final,会报同样的错
这里写图片描述

final类中的方法

这里写图片描述
代码分析:当类被final修饰后,其的方法也不能被覆盖。

多层继承

多层继承容易理解,就像一个人只可能有一个生理学父亲,但其可以有爷爷,太爷爷等。子类只能有一个父类,但可以进行多层继承。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/79347128