类继承的作用
继承可以描述类与类之间的关系,
例如: 在斗地主的小游戏中,我们只看牌,牌里面有分4种花色的牌(除了大小王),♥,♠,♦,♣,我们可以知道♥的牌是牌,♠的牌是牌……,形如:在中文的描述种,什么是什么,例如 A 是 B,我们就可以理解成 A 是 B的子集(数学角度上)B 包含 A
在程序编程思想中,如果A和B都是类,并且可以描述为A是B,则A和B形成继承关系:
- B是父类,A是子类
- B派生A,A继承自B
- B是A的基类,A是B的派生类
如果A继承自B,则A中自动拥有B中的所有成员
属性继承:获取父类牌的花色,这是一个父类的属性,字类可以直接拿到
方法继承:假设牌都有一个方法叫做来摸我(瞎说的哈),这个方法应该是属于玩家类的行为,用于理解继承父类后,属性和方法也被同时继承。
成员重写
重写(override):子类中覆盖父类的成员,
注意
- 子类成员不能改变父类成员的类型
- 无论是属性还是方法,子类都可以对父类的相应成员进行重写,但是重写时,需要保证类型的匹配。
但是有一点,如果我们字类和父类的参数保持一致,但是如果父类的返回值类型是void,字类可以随便定义返回值类型。如下:
原因:
- 注意this关键字:在继承关系中,this的指向是动态——调用方法时,根据具体的调用者确定this指向;
- super关键字:在子类的方法中,可以使用super关键字读取父类成员(这个成员是指父类的方法,不能获取父类的属性)
this 和 super 的区别( 在子类中)
1.如果方法或者属性没有进行重写,那么this 和 super 是一样的。
2.如果方法进行重写:
。this 指向的是当前子类的实例,而super指向的是父类
。super当作属性使用的时候, super 指向的是父类的原型,因此super无法拿到父类的实例属性,只能拿到父类的public和protected的方法,super 如果当方法使用的话,只能在字类的构造函数中并且是第一行使用,需要使用super()来实例化父类里面的属性,确保字类可以获取父类的成员。
继承的类型匹配
字类的对象,永远可以赋值给父类,(鸭子辩型法,或者子结构法)例如:
面向对象中,这种现象,叫做里氏替换原则(是里氏这个人提出的原则,哈哈)
如果需要判断一个数据的具体子类类型,可以使用instanceof
类的单根性和传递性
单根性:每个类最多只能拥有一个父类
传递性:如果A是B的父类,并且B是C的父类,则,可以认为A也是C的父类