Java继承(上)

本文深入探讨了面向对象编程中的继承与多态概念,解析了继承如何促进代码复用,缩短开发周期,以及方法重写与重载的区别。同时,详细介绍了访问修饰符的使用规范,super关键字的作用,以及继承时的初始化顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特点:

1.利于代码复用

2.缩短开发周期

  • 一种类与类之间的关系

  • 使用已存在的类的定义作为基础建立新类

  • 新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类

继承的关系

满足“A is a B”的关系就可以形成继承关系

继承的实现

通过extends关键字实现

例:

编写父类

class Animal{
    //公共的属性和方法
}

编写子类,继承父类

class Dog extends Animal{
    //子类特有的属性和方法
}
​
class Cat extends Animal{
    ...
}

子类可以直接访问父类的非私有成员

父类不可以访问子类的特有成员(公有的也不行)

 

方法重写

方法重写与方法重载的区别:

方法重载:

1.在同一个类中

2.方法名相同,参数列表不同(顺序、个数、类型)

3.方法返回值、访问修饰符任意

4.与方法的参数名无关

方法重写:

1.在有继承关系的子类中

2.如下

  • 方法名

  • 参数类型、顺序、个数

都要与父类继承的方法完全相同,方法返回值类型可以是父类的子类(即返回值类型与父类兼容)

3.访问修饰符允许改变,但访问范围需要大于等于父类的访问范围

4.与方法参数名无关

当子类重写父类方法后,子类对象调用的是重写后的方法

子类中可以定义与父类重名的属性,子类对象调用时会调用子类中的重名属性

 

访问修饰符

  • 公有的:public :允许在任意位置访问

  • 私有的:private:只允许在本类中进行访问

  • 受保护的:protected:允许当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许

  • 默认:允许在当前类、同包子类/非子类调用:跨包子类不允许

访问修饰符本类同包子类其他
private   
默认  
protected 
public

 

super关键字的使用

super:父类对象的引用

父类的构造不允许被继承和重写

子类构造默认调用父类的无参构造方法

可以通过super()调用父类允许访问的其他构造方法(直接在super的括号里加参数即可)

通过super调用父类其他构造方法时,super()必须放在子类构造方法有效代码的第一行

总结:

  • 代表父类引用

    1.访问父类成员方法——super.print();

    2.访问父类属性——super.name;

    3.访问父类构造方法——super();

  • 子类的构造过程中必须调用其父类的构造方法

  • 如果子类的构造方法中没有显式标注,则系统默认调用父类的无参构造方法

  • 如果子类的构造方法中既没有显式标注,且父类中没有无参构造方法,则编译出错

 

继承后的初始化顺序

1.父类静态成员

2.子类静态成员

3.父类对象构造

4.子类对象构造

访问修饰符不影响成员加载顺序,跟书写位置有关

 

this和super

都不能在静态方法中被调用

this调用本类的构造方法,super调用父类的构造方法

构造方法调用时都必须放在第一行

this和super不能共存

总结

this:当前类对象的引用

1.访问当前类的成员方法

2.访问当前类的成员属性

3.访问当前类的构造方法

4.不能在静态方法中使用

super:父类对象的引用

1.访问父类的成员方法

2.访问父类的成员属性

3.访问父类的构造方法

4.不能在静态方法中使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值