@[TOC] 类的继承
什么是类的继承?
借用书上的话来讲:
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
为什么要使用继承呢?
试想一下:在之前我创建了一只小狗的类,现在我又想创建一个小猫的对象。
现在来分析一下小猫里面都有什么属性和行为:名字,品种,毛发颜色,吃喝拉撒,再加个吃小鱼干吧。
下面来看看小猫的代码:
class cat{
String name;//名字
int age;//年龄
String variety;//品种
//小猫吃
public void eat(){
//eating......
}
//小猫喝水
public void drinking(){
//drinking......
}
//.......
}
欸,仔细一看好像有些代码是和小狗一样啊。
所以这里继承就有用了。如果有一个父类里面包含了小猫,小狗都有的属性和行为的代码,那么通过继承,我们就只需要在小猫和小狗里面添加新的代码就好了。就不用额外敲代码了。想想感觉还是蛮方便的啊。
那么下面就来介绍一下继承的格式具体怎么写吧:
class animal{
String name;//名字
int age;//年龄
String variety;//品种
//something else in it
}
class cat extends animals{
;
super.age;
super.variety;
//小猫吃
public void eat(){
//eating......
}
//小猫喝水
public void drinking(){
//drinking......
}
//.......
}
public class 类名(子类、派生类) extends 类名(父类、基类) {
}
注意:Java中类的继承是单继承
以上就是继承的语句了。或许会有疑问,里面的super是什么啊?
super关键字是指代父类的对象,通过super我们可以访问父类中的可以访问的属性值和函数
继承到的内容
就和现实生活中一样,老人去世的时候中有一部分东西是继承不到的。。。
有以下两点很重要:
- 子类能继承到父类所有的属性和所有的普通方法。
- 继承和访问修饰符是没有任何关系的。
下面是子类可以访问的范围:
访问权限 | 子类 |
public | 可以 |
protected | 可以 |
defult | 不可以 |
private | 不可以 |
方法重写
第一眼看上去好像和方法重载蛮像的,但是方法重写和方法重载有很大的区别。
方法重写的条件:
- 必须存在继承关系
- 子类方法的访问修饰符要大于或等于父类方法的访问修饰符
- 子类方法的返回值类型,方法名,参数都必须和父类完全一致!!!!
- 方法的具体实现要不同
重写后的方法如何调用?
这个是根据类名来调用的,如果类名是子类的,就优先调用子类的方法,子类中没有这个方法就会调用父类中的方法。
** 如何也执行父类的方法?**
super!super!super! 重要的事情说三遍。
自动转型
什么是自动转型?
很简单,cat c =new cat();声明了一个cat类的对象,他的类别是cat ,使用自动转型就可以把c 从cat类转换为animal类
cat c = new cat();
c = (animal) c;
//这样就是自动转型
条件
- 必须存在继承关系
格式
animal c = new cat();
//父类名 对象名 = new 子类构造方法(参数);
注意:使用自动转型之后会无法调用子类里面独有的属性和普通方法!!!
为何要使用自动转型呢?
假如我定义了一个方法
public void eat(Object o){
//eating......
}
这里我想要传入的参数既可以是父类也可以是子类,那么就要用到自动转型了。
ok Java的一个主要特性面向对象的继承性就到这里,下面将会讲到抽象类和接口