第六节课,我们学习了类的继承、接口和抽象类,通过初步的学习,也大概了解了他们的用法和作用。
一、继承
1.定义及简介:
继承是从已经存在的类中创建新类的机制,我们可以通过继承实现代码复用,通过学习,我们知道,Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的称为父类。继承的关键字是extends,java类的继承是单继承。
2.格式:
public class 类名(子类、超类、派生类) extends 类名(父类、基类){
}
3.子类从父类继承和调用的规则:
1.子类继承到了父类所有的属性和方法
2.但调用有访问修饰符的限制:
修饰符 调用的范围
private 类{}中
默认的 包中
protected 包中和包外的子类
public 项目中
4.优点:
a.因为大部分的方法属性是继承而来的,实现了代码重用,减少了代码的书写量;
b.很容易修改和扩展已有的实现
5.缺点:
a.当父类的实现改变时可能要相应的对子类做出相应的改变
b.不能再运行时改由父类继承来的实现
6.方法重写
a.重写的条件
1)继承
2)返回值数据类型、方法名、参数类型、参数个数、参数顺序必须要完全一致
3)子类重写方法时可以扩大访问修饰符的范围(但是不能缩小)
b.什么情况下要使用方法的重写
当子类和父类的方法有差别时,我们就要用到方法的重写
c.重写后方法的调用
重写后用普通方法调用重写后的方法,因为重写后的方法将父类的方法给覆盖了,此时,如果要调用父类的方法,就要用到super关键字,格式为:super.父类的方法。
7.自动转型
a.条件
必须要存在继承关系
b.格式
父类名 对象名 = new 子类名();
c.好处
英语老师现在是给大学生教英语。那么也是可以给高中生、初中生、小学生、幼儿园学生教英语,例如:
teach(大学生){ study(); }
teach(高中生){ study(); }
teach(初中生){ study(); }
teach(小学生){ study(); }
teach(幼儿园学生){ study(); }
teach(学生){
study();
}
d.在用自动转型的时候,不能直接调用子类的方法。
e.生活中的自动转型:
书 自然科学类的书 计算机类的书 介绍java的书: 介绍java的书是计算机类的书,计算机类的书是自然科学类的书,自然科学类的书是书,介绍java的书是书。
8.多态:即类的多种表现方式,提供类中方法执行的多样性,比如同名不同参、子类重写父类,具体表现在覆盖和重写。
二、接口
Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
定义接口的关键字是interface
格式
public interface 接口名 extends 接口,... {
//常量
public static final 数据类型 常量名 = 值;
//抽象方法
public 返回值数据类型 方法名(数据类型 参数名,...);
}
注意:
1.类去实现接口的关键字是:implements
public class 类名 extends 类名或者抽象类 implements 接口名,... {
//实现(重写)父接口中所有的抽象方法
}
2.接口可以继承多个接口,接口不可以实例化对象
3.接口中的常量名全部要大写
接口和类的区别:接口是特殊的类,也就是接口属于类,类描述的是一个实体,包括实体的状态和实体可能发出的动作。接口则是定义了一个实体可能发出的动作。但是至少定义了这些动作的原型,没有实现,也没有任何状态信息。类是有自己的属性,而接口没有。
三、抽象类
定义抽象类的关键字:abstract class
格式:
public abstract class 抽象类名 extends 类名或者抽象类 implements 接口名,... {
//类中所有的属性和方法
//接口中的常量和抽象方法
public abstract 返回值数据类型 方法名(数据类型 参数名,...);
}
在抽象类中定义的抽象方法,是由子类去实现,而不是去覆盖,因为在父类中没有具体的实现。
对于这节课学习的内容,比较多,而且好多概念性的问题,这得我们多多重复,好好理解,当然,敲代码这个工作是绝对必须的。