Java面向对象——继承(超详细讲解)

一、继承的基本概念

  1. 被继承的类称为父类(超类),继承父类的类都称为子类(派生类)
  2. 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法;
  3. Java只能实现单继承,即一个类只能有一个父类
  4. 构造方法不能被继承。
  5. Protected:受保护的访问权限修饰符,用于修饰属性和方法;也就是专门用于子类继承父类所使用的修饰符;修饰的属性和方法可以被子类继承
  6. 子类可以直接访问父类中的非私有的属性和行为。

    通过 extends 关键字让类与类之间产生继承关系。

  7. 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关键字的总结:

  1. super能出现在实例方法和构造方法中。
  2. super的语法是:"super."、"super(" ​ super不能使用在静态方法中。
  3. super,大部分情况下是可以省略的。
  4. 那么​ “ 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  关键字” ,如果大家不了解了,我会在下期的文章中讲到,有什么建议的,望各位提出来

  • 22
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值