文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java中的继承

2023-09-01 20:21

关注

一、继承

是面向对象三大特征之一。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承的方法,使得子类具有父类相同的行为。

继承需要符合的关系是:is-a。例如:智能手机是手机。

二、类的继承格式

在java中通过extends关键字可以申明一个类是从另一个类继承而来的,一般形式如下:

{修饰符列表} class类名 extends 父类名{

                        类体=属性+方法

}

class Phone{    }class SmartPhone extends Phone{    }

三、java语言中的继承只支持单继承

一个类不能同时继承很多类,只能继承一个类。但是一个类也可以间接继承其他类。

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

C类直接继承B类,但是C类间接继承A、T类。

四、继承的特性

private修饰的属性、方法不支持继承。

构造方法不支持继承。

继承父类非private的属性和方法,并且子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

五、所有类的父类---Object类

java语言中一个类没有显示的继承任何类,该类默认继承java.lang.Object类。

六、方法重写

在继承体系中,子类中出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。私有方法不能被重写。子类重写父类方法时,访问权限必须大于或等于父类。

方法重写的应用场景,当父类的该功能不能完全满足自己的需求时,子类可以重写父类中的方法。

public class Teat4 {    public static void main(String[] args) {        SmartPhone hw=new SmartPhone();        hw.call();        hw.sendMsg();    }}class Phone{    public void call(){        System.out.println("打电话");    }    public void sendMsg(){        System.out.println("发短信");    }}class SmartPhone extends Phone{    public void call(){        System.out.println("视频通话");    }    public void sendMsg(){        System.out.println("发图片");    }}

运行结果:

七、继承后:成员变量、成员方法的访问特点。

在子类中访问成员变量或成员方法满足:就近原则。

先从子类开始找,按照从局部范围到成员范围的顺序;在子类中没有找到再从父类中找,也是按照从局部范围到成员范围找;若是在父类中也没有找到,就会报错!

如果子父类中出现了重名的成员,会优先使用子类的。此时如果一定要在子类中使用父类的怎么办?

可以通过super关键字,指定访问父类的成员。

格式:super.父类成员变量/父类成员方法格式,如下:

public class Teat4 {    public static void main(String[] args) {        SmartPhone hw=new SmartPhone();        hw.call();        hw.sendMsg();    }}class Phone{    public void call(){        System.out.println("打电话");    }    public void sendMsg(){        System.out.println("发短信");    }}class SmartPhone extends Phone{    public void call(){        super.call();        System.out.println("视频通话");    }    public void sendMsg(){        super.sendMsg();        System.out.println("发图片");    }}

运行结果:

 八、子类构造器

子类继承父类后,子类中所有的构造器都会默认先访问父类中无参数的构造器,然后再执行自己的。

public class Teat4 {    public static void main(String[] args) {        SmartPhone sm=new SmartPhone();        SmartPhone sm1=new SmartPhone(6900);    }}class Phone{    int price;    public Phone(){        System.out.println("父类无参数的构造方法! ");    }}class SmartPhone extends Phone{    public SmartPhone(){        System.out.println("子类中无参数的构造方法!");    }public SmartPhone(int price){        this.price=price;        System.out.println("智能手机的价格为:"+price);    }}

运行结果:

 2、如果父类中没有无参数的构造器,只有有参构造器,就会报错。因为子类默认是调用父类无参构造器的。

public class Teat4 {    public static void main(String[] args) {        SmartPhone sm1=new SmartPhone(6900);    }}class Phone{    int price;    public Phone(int price){        this.price=price;        System.out.println("手机的价格为:"+price);    }}class SmartPhone extends Phone{    public SmartPhone(int price){        this.price=price;        System.out.println("智能手机的价格为:"+price);    }   }

运行结果:

 3、如何解决

子类构造器中可以通过书写super(...),手动调用父类的有参构造器

public class Teat4 {    public static void main(String[] args) {        SmartPhone sm1=new SmartPhone(6900);    }}class Phone{    int price;    public Phone(int price){        this.price=price;        System.out.println("手机的价格为:"+price);    }}class SmartPhone extends Phone{    public SmartPhone(int price){        super(price);        this.price=price;        System.out.println("智能手机的价格为:"+price);    }}

运行结果:

来源地址:https://blog.csdn.net/2301_76967212/article/details/130183261

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯