继承
- 什么是继承?有什么用?
- 子承父业就是继承
- 基本作用:子类继承父类,代码可以得到复用。
- 主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。
- 继承的相关特性:
- 1、
- B类继承A类,则称A类为超类(superclass),父类,基类
- B类则称为子类(subclass),派生类,拓展类。
- class A{}
- class B extends A{}
- 我们平时聊天说得比较多的是:父类和子类。
- 2、
- Java中的继承只支持单继承,不支持多继承,C++中支持多继承,
- 这也是Java体现简单性的一点,换句话说,Java中不允许这样写代码:class B extends A,C{}
- 3、
- 虽然Java中不支持多继承,但有的时候会产生间接继承的效果,例如:
- class B extends A{} class C extends B{}
- 也就是说C直接继承B,其实还间接继承A
- 4、
- Java中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问,(父类中private修饰的不能再子类中直接访问,可以通过间接的手段来访问。)
- 5、
- Java中的类没有显示继承任何类,默认继承object类型,object类是Java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有object类型中所有的特征。
- 6、
- 继承也存在一些缺点,子类继承了父类就导致他们之间耦合度非常高,父类发生改变,子类必定受到牵连。
问题:子类继承父类之后,能使用子类对象调用父类方法吗?
答:本质上,子类继承父类之后,是将父类继承过来的方法归为自己所有。实际上调用得到也不是父类的方法,是他子类自己的方法(因为已经继承过来了就属于自己了)。
在实际开发中,满足什么条件的时候,我可以使用继承呢?
凡是采用 is a 能描述的,都可以继承。
例如:cat is a animal
假设以后的开发中有一个A类,有一个B类,A类和B类确实也有重复的代码,
那么他们两个之间就可以继承吗?不一定,还是要看一看他们之家你是否能够使用is a 来描述。
任何一个类,没有显示继承任何类,默认继承object,那么object类当中有哪些方法呢?
以后慢慢的大家一定要适应看JDK的源代码。
java为什么比较好学呢?
是因为java内置了一套庞大的类库,程序员不需要从0开始写代码,程序员可以基于这套庞大的类库进行二次开发(开发速度较快,因为JDK内置的这套库实现了很多基础的功能)
例如:String是SUM公司编写的字符串类,System是SUM编写的系统类。
这些类可以拿来直接使用。
System.out.println();
类名.静态变量.方法
我们研究了一下object类当中有很多方法,大部分看不懂,其中有一个叫做toString()的,我们进行了测试,发现:
System.out.println(引用);
当直接输入一个引用的时候,println()方法会先自动调用引用.toString(),
然后输出toString()方法的执行结果。
什么时候我们会考虑方法覆盖呢?
子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,
子类有权利对这个方法进行重新编写,有必要进行方覆盖。
重要结论:
当子类对父类继承过来的方法进行方法覆盖之后。
子类对象调用该方法的时候,一定执行覆盖之后的方法。
当我们代码怎么编写的时候,在代码级别上构成了方法覆盖呢?
条件一:两个类必须要有继承关系。
条件二:重写之后的方法和之前的方法具有:
相同的返回值类型
相同的方法名
相同的形式参数列表
条件三:访问权限不能更低,可以更高、
条件四:重写之后的方法不能比之前的方法抛出更多的异常。
- 注意事项:
- 注意1:方法覆盖只是针对于方法,和属性无关。
- 注意2:私有方法无法覆盖。
- 注意3:构造方法不能被继承,所以构造方法也不能被覆盖。
- 注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义。
当输出一个引用的时候,println方法会自动调用引用的toString。
toString()方法存在的作用就是:将java对象转换成字符串形式。
大多数的java类toString()方法都是需要覆盖的。
因为object类中提供toString()方法输出的是一个java对象的内存地址。
- 点赞
- 收藏
- 关注作者
评论(0)