目录
一、继承的基本概念与规则
1.继承的概念
继承是两个类之间的一种特殊关系。例如儿子类和父亲类,儿子继承父亲类。儿子类(子类),父亲类(父类)。
2.继承的关键字
- extends 例如: A类 extends B类,表示A继承了B。
- super 在构造器中会讲到,是在继承中的一种特殊情况。
3.继承的结果
- 会继承父类所有的成员(变量和方法),除了private成员和构造器。
- 子类可以掉用父类protected,public修饰的成员。
二、继承代码
PS:以下会列举四个重点情况
1.继承之---最简单继承
import java.util.*;
//该类为父类,汽车类
class Vehicle {
int fatherAge= 40; //父类的成员变量 Vehicle的使用时间
public void Vehiclerun() { //父类的方法
System.out.println("父类:汽车在跑run1()");
}
}
//子类继承父类之后,子类还可添加自身方法。
class Bus extends Vehicle {
//子类所特有的功能
int sonAge = 18; //子类自身的成员 Bus的使用时间
public void busRun() { //子类自身的方法
System.out.println("子类:公交车汽车在跑");
}
}
public class Testinherit {
public static void main(String[] args) {
//父类实现
Vehicle v = new Vehicle();
v.Vehiclerun();
System.out.println("使用时间:"+v.fatherAge);
//子类实现
Bus b= new Bus();
b.busRun();
System.out.println("使用时间:"+b.sonAge);
//子类调用父类成员
b.Vehiclerun();
System.out.println("使用时间:"+b.fatherAge);
}
}
结果如下:
分析如下:
- 在同一个包中新建 Vehicle(父类),Bus(子类),TestInherit(测试类),并建立Bus与Vehicle的继承关系
- Vehicle(父类)与Bus(子类)中分别创建一个成员变量和成员方法。
- 在Testinherit测试类中分别实例化父类与子类,再分别用父类对象v调用父类成员,子类对象b调用子类成员
- 最后两项,用子类对象b调用父类成员
2.继承之---构造器加入
PS:有了构造器,那么就会有super关键字的使用与重载
- 首先我们来看看构造器的特点
import java.util.*;
/*PS:此代码由上面代码改变而来,方便理解*/
class Vehicle {
Vehicle(){
System.out.println("父类构造器");
}
public void Vehiclerun() { //父类的方法
System.out.println("父类:汽车在跑run1()");
}
}
class Bus extends Vehicle {
Bus(){
System.out.println("子类构造器");
}
public void busRun() {
System.out.println("子类:公交车汽车在跑");
}
}
public class Testinherit {
public static void main(String[] args) {
Vehicle v = new Vehicle();
v.Vehiclerun();
//子类实现
Bus b= new Bus();
b.busRun();
//子类调用父类成员
b.Vehiclerun();
}
}
结果如下 :
分析如下:
- 只要实例化一个对象,就会在实例(使用了new 表示实例和[声明]不同)同时调用该类的构造器(也叫构造函数)
- 当子类实例化对象时,也会调用父类的无参构造器。(有参构造器请看 重载)
- 当子类实例化对象时,子类的构造器方法中第一行会用 super(); 调用父类构造器。
- 若父类构造器有参数,则需要在子类构造器第一行使用super关键字显式调用父类构造器,并且实例化父类构造器也需要传参。
-
import java.util.*; /* 最基础继承 */ class Vehicle { Vehicle(int m){ /**********************/ System.out.println("父类构造器"+m); } public void Vehiclerun() { //父类的方法 System.out.println("父类:汽车在跑run1()"); } } class Bus extends Vehicle { Bus(){ super(4); /*********************/ System.out.println("子类构造器"); } public void busRun() { System.out.println("子类:公交车汽车在跑"); } } public class Testinherit { public static void main(String[] args) { Vehicle v = new Vehicle(3); /*******************/ v.Vehiclerun(); //子类实现 Bus b= new Bus(); b.busRun(); //子类调用父类成员 b.Vehiclerun(); } }
结果如下:
PS:super:主要存在与子类方法中,用于指向子类对象中的父类对象this当前对象,super,当前对象的父类对象)
访问父类成员,构造器(这个不难,就不写了)
3.继承之---多态转型
4.继承之---抽象类接口
这两个主要讲的是多态、抽象类、接口等,将会在接下来的文章中介绍。敬请期待!
三、继承的优势和使用
- 通过继承,可以有效减少代码的重复。有利于程序的维护。
例如:父类有eat(),run()两个成员,(多个)子类需要使用这两个成员,并且还需要加一个sleep()成员。这个时候,如果在子类中重复写eat(),run()这两个成员,这样会十分浪费空间、增加代码赘余等。
- Object类,在Java.lang中,Object类是一切类的父类(若没有显示指明父类,则默认继承了Object类),所以有equals(),toString()等常用方法