一、继承的概念
继承是面向对象的一个显著特性。继承是从已有的类中派生出的新类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
二、语法格式

class 子类 extends 父类 {}

子类又称为派生类; 父类又被称为超类(Super Class)。
三、例子

class A { 
	 private String name;
   public void  setName(String name) {
        this.name=name;
     }
   public String getName() {
        return name;
     }
 }

 public class B extends A {   // B类继承A类
 	 public static void main(String args[])
     { 	  
		 B b=new B();// 实例化的是子类
		 b.setName("江江");// B类定义
	 System.out.print(b.getName()); 
     }
 }

运行结果:

江江

四、继承的限制
JAVA中可以多层继承,但不能多重继承。
可以这样继承:

class A {}
class B extends A {}
class C extends B {}

但不能这样继承:

class A {}
class B {}
class C extends A,B {}          // 一个子类继承了两个父类

但是 implements可以这样写

class A implements B,C,D,E {}

注意:
1)子类继承的时候,实际上会继承父类的所有操作(属性、方法),但是需要注意的是,对于非私有的属于显式继承(可直接利用对象操作),而所有的私有(private)操作属于隐式继承(需要间接完成)。
2)实例化子类对象时,它会默认先执行父类构造,调用父类构造的方法体执行,然后再实例化子类对象,调用子类的构造方法。而这个时候,对于子类的构造而言,就相当于隐含了一个 super()方法调用父类构造方法。
五、super()
super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
super有三种用法:

  1. 普通的直接引用。
    与this类似,相当于是指向当前父类的对象,直接super.x 来引用父类的成员。
    2)子类中的成员变量或方法与父类中的成员变量或方法同名。
    例子:
class A {
    String name;
    void getName() {
       name = "A";
    }
}
  
public class C extends A{//C类继承A类
    String name;
    void getName() {
    name = "C";
    super.getName();      //调用父类的方法
    System.out.println(super.name);
    System.out.println(name);
    }
  
    public static void main(String[] args) {
       C c=new C();// 实例化的是子类
       c.getName();
       }
}

运行结果:

A
C

3)引用构造函数
调用父类中的某一个构造函数。
注意:super调用父类构造时,一定要放在构造方法的首行上。
例子:

class A {   
   A() { 
	   System.out.println("父类:无参数构造方法:"); 
    }//构造方法(1) 
    
   A(String name) { 
	   System.out.println("父类:有参数的构造方法: "+"name:" + name); 
    }//构造方法(2) 
} 

    
public class B extends A { 
   B() { 
       super(); // 调用父类构造方法 
       System.out.println("子类:调用父类”无参数构造方法“:"); 
    } 
    
   B(String name) { 
       super(name);// 调用父类具有相同形参的构造方法
       System.out.println("子类:调用父类”有参数的构造方法“: "+"name " + name); 
    } 
    B(String name,String str) { 
       this(name+str);// 调用具有相同形参的构造方法 
       System.out.println("子类: this(name)方法调用父类有参数的构造方法"+"name  "+name+str); 
    } 
    
    public static void main(String[] args) { 
     B b = new B(); //无参
       b = new B("江江"); //有参
       b = new B("江江","This()"); //this(name) 调用具有相同形参的构造方法
    } 
}

运行结果:

父类:无参数构造方法:
子类:调用父类”无参数构造方法“:
父类:有参数的构造方法: name:江江
子类:调用父类”有参数的构造方法“: name 江江
父类:有参数的构造方法: name:江江This()
子类:调用父类”有参数的构造方法“: name 江江This()
子类: this(name)方法调用父类有参数的构造方法: name 江江This()