继承
-
继承的本质是对某一类的抽象,从而实现对现实世界更好的建模。
-
extends的意思是"扩展",子类是父类的扩展
-
java中类只有单继承,没有多继承
-
继承是类和类之间的一种关系。除此之外,类和类之间还有依赖、组合、聚合等。
-
继承关系的两个类,一个为子类,一个为父类,子类继承父类,使用关键字extends来表示
-
子类和父类之间从意义上讲应该具有"is a"的关系
重写
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大: public > Protected > Default > private
- 抛出的异常可以被缩小,但不能扩大 ClassNotFoundException ---》 Exception
重写,子类的方法和父类必要一致,方法体不同!
为什么要重写?
-
父类的功能,子类不一定需要,或者不一定满足
Alt + insert : override;
- object类
- super
- 方法重写
子类会继承父类的所有方法!
# Super |
---|
## super注意点 |
1. super调用父类的构造方法,必须在构造方法的第一个 |
2. super必须只能出现在子类的方法或者构造方法中 |
3. super 和 this 不能同时调用构造方法 |
## Vs this |
代表的对象不同: |
this : 本身调用这个对象 |
super:代表父类对象的应用 |
前提: |
this :没有继承也可以使用 |
super:只能在继承条件才可以使用 |
构造方法: |
this();本类的构造 |
super();本类的构造 |
如果在意构造器,创建子类的对象时,父类的构造器应被优先考虑,super()仅在父类有无参构造器的时候才可以省略 |
多态
为什么要用多态?
如果要更改子类的某一个属性,就要新建一个类,创建对象。用一个判断,来改变属性,但是如果改多个子类的话。就要不断的用重载。很麻烦。代码的可扩展性减小、可维护性差。这个时候就可以用多态。
多态的用法
形参换成父类类型。在父类里加上一个方法。然后创建对象父类引用子类对象〈父类〉〈变量名〉= new〈子类〉。就可以直接调用。方便快捷又好使。
public static void main(String[] args) {
//当方法有static时,方法的调用只和左边,定义的数据类型有关
A a = new A();
a.test();
//父类的引用指向了子类
B b = new A();
b.test();
}
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的,但是可以指向的引用类型就不确定了,父类的引用可以指向子类
//Student 能调用的方法都是自己的或者是继承的
Student s1 = new Student();
//Person 指向子类但是不能调用子类的方法,并且如果父类的方法被重写,则调用子类重写后的方法
Person s2 = new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
s1.test();
s1.run();
s1.eat();
s2.eat();
s2.run();
//s2.test(); 编译不通过 需要将s2强制转换
}
}
- 多态是方法的多态,属性没有多态
- 父类和子类有关系 不能强转 会有异常 ClassCastException
- 存在条件:有继承关系,方法需要重写,父类引用指向子类对象
不能重写的方法:
- static 方法属于类,不属于实例
- final 修饰
- private 方法
向上/向下转型
向上转型:父类的引用转向子类对象。自动进行类型转换。
Pet dog = new Dog(); // 转成 Pet dog = new Pet();
- 此时通过父类引用子类对象调用的是子类继承或者重写的父类方法。
- 父类引用子类对象无法调用子类特有的方法。
如果要调用子类特有的方法。要使用向下转型:
〈子类型〉〈变量名〉=(子类型)〈父类型的引用变量〉
- 向上转型,自动类型转换。
- 向下转型,强制类型转换。
标签:super,继承,子类,多态,方法,父类,重写 来源: https://www.cnblogs.com/Asstrong/p/14440579.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。