一、继承的基本概念
- 被继承的类称为父类(超类),继承父类的类都称为子类(派生类)
- 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法;
- Java只能实现单继承,即一个类只能有一个父类
- 构造方法不能被继承。
- Protected:受保护的访问权限修饰符,用于修饰属性和方法;也就是专门用于子类继承父类所使用的修饰符;修饰的属性和方法可以被子类继承
-
子类可以直接访问父类中的非私有的属性和行为。
通过 extends 关键字让类与类之间产生继承关系。
-
class SubDemo extends Demo{} //SubDemo是子类,Demo是父类
语法:[访问权限修饰符] class 子类名 extends 父类名{
类体定义}
调用父类的构造方法时,子类必须通过super(~~)调用父类的带参构造方法,
super只能在子类构造方法中的第一句;
二、super关键字
super可以完成以下的操作:
1、使用super调用父类中的属性,可以从父类实例处获得信息。
2、使用super调用父类中的方法,可以委托父类对象帮助完成某件事情。
3、使用super调用父类中的构造方法(super(实参)形式),必须在子类构造方法的第一条语句,调用父类中相应的构造方法,若不显示的写出来,默认调用父类的无参构造方法,比如:super();
下面我们来通过一个例子来更深层次的理解super关键字以及继承关系:
public class text14{
public static void main(String[] args){
Bird b = new Bird();
b.print();
Cat c = new Cat();
c.print2();
b.run();
}
}
class Animal{
protected String name;
protected String sex;
public void run(){
System.out.println("动物在跑!");
}
}
//注意:这里都是无参构造,所以name和sex都是默认值:null
class Bird extends Animal{
public void print(){
//super.属性 表示调用父类的属性,如果是继承过来的属性,那么super可以省略;
super.run(); //调用父类的方法;
System.out.println(super.name +"我是一只鸟,");
}
//重写父类的方法:
public void run(){
System.out.println("正在天上飞!");
}
}
class Cat extends Animal{
public void print2(){
System.out.println(sex+"我是一只猫 ");
}
}
运行结果如下所示:
动物在跑!
null我是一只鸟,
null我是一只猫正在天上飞!
-
super关键字的总结:
- super能出现在实例方法和构造方法中。
- super的语法是:"super."、"super(" super不能使用在静态方法中。
- super,大部分情况下是可以省略的。
- 那么 “ super. ” 什么时候不能省略呢???????? (例如:代码二)
父类 和子类中有共同的属性特征或者方法时,如果想在子类中访问”父类的特征“,super.不能省略。。
super( )只能出现在构造方法第一行,通过当前的构造方法去调用“父类"中 的构造方法,
目的是:创建子类对象的时候,先初始化父类型特征。
super的使用:
- super.属性名 【访问父类的属性】
- super.方法名(实参) 【访问父类的方法】
- super(实参) 【调用父类的构造方法】
如下代码运行结果为:
//1 3 6 5 4
代码一
public class test{
public static void main(String args[]) {
new Son2(); //1 3 6 5 4
}
}
class father{
public father(){
System.out.println("1");
}
}
//中间人
class Son1 extends father{
public Son1(){
System.out.println("2");
}
public Son1(String name){
//这里会默认调用super();
System.out.println("3");
}
}
class Son2 extends Son1{
public Son2(){
this("name");
System.out.println("4");
}
public Son2(String name){
this("老六",99);
System.out.println("5");
}
public Son2(String name,int age){
super("老黑");
System.out.println("6");
}
}
注意:这里的代码用到了“ this 关键字” ,如果大家不了解了,我会在下期的文章中讲到,有什么建议的,望各位提出来