一.继承的引入
//定义一个学生类 class Student{ private String name ; priate String age ; ... public Student(){} //有参.. //SetterXXX/GetterXXX(){ .. } } //定义一个老师类 class Teacher{ private String name ; private String age ; //无参/有参... //SetterXXX/GetterXXX(){ .. } }
//观察这两个类代码,有共同的内容,对应提供了公共
无参,.公共访问方法
上述这种做法非常麻烦,代码会显得非常臃肿,所有需要对它的访问方法,无参/有参构造...
上述这种做法非常麻烦,代码会显得非常臃肿,所有需要对它的访问方法,无参/有参构造...
将多个类共性内容,抽取一个独立的类,只需要让这个独立的类和多个类产生一种关系:Java提供继承
语法规定:
语法规定:
class 父类{ } class 子类 extends 父类{ //子类继承了父类 } //改进上面的代码 //定义一个人类 class Person{ private String name ; private String age ; //无参/有参... //SetterXXX/GetterXXX(){ .. } } class Student extends Person{} class Teacher extends Person{} ...... extends Person{}
二、继承的概念
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
在Java之中,如果要实现继承的关系,可以使用如下的语法:
class 子类 extends 父类 {}
- 1
子类又被称为派生类; 父类又被称为超类(Super Class)。
子类即使不扩充父类,也能维持父类的操作。
三、继承的限制
虽然继承可以进行类功能的扩充,但是其在定义的时候也是会存在若干种限制的。
1.一个子类只能够继承一个父类,存在单继承局限。
错误的写法:
class A {}
class B {}
class C extends A,B {} // 一个子类继承了两个父类
以上操作称为多重继承,实际上以上的做法就是希望一个子类,可以同时继承多个类的功能,但是以上的语法不支持而已,但是可以换种方式完成同样的操作。
正确的写法:
class A {}
class B extends A {}
class C extends B {}
C实际上是属于(孙)子类,这样一来就相当于B类继承了A类的全部方法,而C类又继承了A和B类的方法,这种操作称为多层继承。
结论:Java之中只允许多层继承,不允许多重继承,Java存在单继承局限
2.在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
3
:在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法
四.练习题
package org.westos.继承_01; /** * 看程序,写结果: * 子类继续父类,父类先进行初始化,然后子类进行初始化,这就是继承中分层初始化 * 类名 对象名 = new 类名() ; 这句话,创建了对象,通过构造方法进行初始化(默认初始化,显示初始化) * * @author Administrator * */ class X { Y b = new Y(); X() { System.out.print("X");//x } } class Y { Y() { System.out.print("Y"); //y } } public class Z extends X { Y y = new Y(); Z() { // super() ; //这个第一句话super(),this(),默认都在一句话,可以省略.... System.out.print("Z"); } public static void main(String[] args) { new Z(); } }