ITPub博客

首页 > 应用开发 > > 面向对象三大特性之继承,20分钟搞定

面向对象三大特性之继承,20分钟搞定

作者:westwolf 时间:2019-11-19 15:09:14 0 删除 编辑

继承是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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-26

  • 博文量
    307
  • 访问量
    21675