------- android培训、java培训、期待与您交流! ----------
面向对象2
一,Java类的继承
概念:继承
(1)把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
(2)继承的体系结构
A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
B:继承体系的学习和使用原则
**学习顶层的内容。因为他是整个体系的共性内容。
**创建子类使用。也就是使用底层的具体对象。
(3)继承的特点:
A:java中只能单继承,没有多继承。
B:java可以有多重(层)继承。
(4)继承的好处:
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
A继承B class A extends B{ }
1.为什么要继承?
通过继承可以使对对象的描述更加清晰,可以实现代码的复用,
可以实现重写类中的变量或方法,可以实现在无源代码的情况下修改被继承的类。
2.Java的类如何实现继承?
Java类的继承是单一的,也是完全继承的。通过关键词extends关键字来实现。
被继承的类称为父类,继承父类的类称为子类。继承语法:public calss classname extends superclassname.
因为Java类的继承是单一的,所以extends后面只能指定一个父类。而完全继承则是指“一个类继承了父类的所有成员变量和成员方法。
3.类继承中的隐藏/覆盖/重载是怎么样的?
类的隐藏:隐藏发生在子类和父类之间,针对父类中成员变量和静态方法而言的。当子类中声明与父类中声明的成员变量名相同时,则实现了对父类成员变量的隐藏。
类的覆盖:覆盖也是发生在子类和父类之间,是指在子类中声明一个与父类具有相同的方法名/输入参数列表/返回值/访问权限等的方法,除过方法体不同外。
在子类中重新编写方法实现的功能。常被用于替换父类相同的方法,实现功能的更新。
类的重载:可发生在父类与子类之间,也可发生在同一类中。是指在子类与父类之间或同一类中定义多个具有相同方法名/访问权限等的方法。
4.构造方法的重载.
如果当类没有构造方法的时候,创建类对象时调用无任何操作的默认构造方法。当子类有自身的无形式列表的构造方法时,创建对象时,会先创建父类的对象,再创建子类的对象。
5. super()方法和类方法复写机制
1) super()方法
在上面的实例中, 实际上在子类Student的构造方法中隐含了一个super()的方法. 该方法表示调用父类(即超类)的构造方法. 需要注意的是,我们也可以使用super(参数类型 参数名, 参数类型 参数名, ...)这样的格式来调用父类重载后的含参构造方法. 下面的例子中用到了这种super方法.
2) 子类对父类方法的复写
子类可以继承父类的方法,也可以复写父类的方法. 但复写父类的方法有一个基本的前提: 所复写的方法不能有比父类方法更严格的访问权限. (访问权限 public > default > private)
6. final关键字:
1.final可以修饰类,方法,变量。
2.final修饰的类不可以被继承。
3.final修饰的方法不可以被覆盖。
4.final修饰的变量是一个常量。只能被赋值一次。
5.内部类只能访问被final修饰的局部变量。
二.多态。
概念:多态指的是父类型的引用可以指向子类的对象。(苹果是水果,足球是球)
Parent p = new Child();
p.execute();
3.1、使用多态调用方法:
当使用多态调用方法时,首先检查父类中是否有被调用的方法,如果没有则编译出错;如果有,再去调用子类的方法。
3.2、多态中的两种类型转换:
① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不需要显示指定:
Parent p = new Child();
② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必须要显示指定,使用强制类型转换:
Parent p = new Child();
Child child = (Child)p;
以下的编译不会出错,运行时报错:
Parent p = new Parent();
Child child = (Child)p;