概念
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修饰后,其的方法也不能被覆盖。
多层继承
多层继承容易理解,就像一个人只可能有一个生理学父亲,但其可以有爷爷,太爷爷等。子类只能有一个父类,但可以进行多层继承。