首页 > 应用开发 > > 面向对象三大特性之继承,20分钟搞定
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承(extends)
继承描述的是类与类之间的关系,大类别称为父类/超类/基类/Superclass,小类别称为子类/派生类/Subclass。
子类与父类的关系: is a
父类可以看作是对多个子类的归纳和总结,这称为泛化; 子类可以看作是对父类的扩展。
子类通过继承可以得到父类的属性/方法,这意味着多个子类的共性代码可以编写在父类中,这是代码复用的体现。
继承的语法
class 父类 {
}
class 子类 extends 父类 {
}
继承的2个特征
1. 传递性
2. 单一继承(一个类只能有1个父类)
Java中,所有类型的最终父类是java.lang.Object, 它是类型层次的根。
java.lang.Object类定义了一些通用的方法:
equals()
toString()
hashCode()
wait()
notify()
getClass()
是不是父类的所有成员都能被子类继承?答案是否定的
此图非常重要!
实例化子类的过程
1. 先初始化父类的属性
2. 调用父类的构造器,如果没有用super关键字指定调用父类的哪个构造器的话,默认将调用父类的无参构造。那如何用super来指定?
super();
super(实参1,实参2,...);
3. 初始化子类的属性
4. 调用子类的构造器
特别注意:
1.子类构造器中没有使用super来调用父类的带参构造,同时父类也没有提供无参构造器,这时,子类编译错误!
2.super()这样的语句只能是子类构造器中的第一条语句,因为先有父才有子!
3.除了可以用super来调用父类构造器之外,还可以用super来访问父类的成员:super.dogName,super.dogEat()
父类与子类的类型转换
子类实例可以赋给父类型的变量,反之则不行(需要转换)
向上转型:
Person obj = new Man();
向下转型:
Man man = (Man)obj;
向下转型时,如果类型不匹配,将发生ClassCastException异常,这时可以使用instanceof运算符进行类型判断:
if( obj instanceof Man ) {
Man man = (Man) obj;
}
方法重写(override)
子类可以重写父类的方法,以达到扩展的目的. 例如:
Person类可以重写Object.toString()和Object.equals()等方法,以改变程序的行为。
方法重写的规则:
1. 方法签名(方法名+参数)一致
2. 访问修饰符可以放大
3. 返回类型可以缩小
方法重写和重载的异同:
相同点:
都让一个方法有了多个版本
不同点:
重载是由参数来驱动,重写是由类型驱动
重载是编译期绑定,重写是运行期绑定
final再议
1.变量前加final就成了常量,不能更改其值
2.class前加final就不能被继承
3.方法前加final就不能被重写
Java 包(package)
包(package),其本质是文件夹,目的是为了防止类重名。目的:为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包名的规范:
域名倒序.项目名.模块名
声明包的语句:
package 包名; //必须是源文件第一句
导入包的语句:
import 包名.类名;
import 包名.*;
事实上,java中类的全名是: 包名+类名
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4662/viewspace-3133977/ ,如需转载,请注明出处,否则将追究法律责任。