java基础-继承(extend)

今天,我们继续来进行继承的学习

        面向对象

一.我们为什么要使用面向对象?

一方面,它使我们的交流更加流畅,我们解决问题不是面向过程,而是面向对象这一流程

第二方面,面向对象可以提高设计和开发效率

二.从现实中抽象出类的步骤:

 1.找出它的种类

  2.找出它的属性

  3.找出它的行为

        在现阶段,专为解决业务逻辑问题的面向对象的方法中,我们要明确一点,对象提取相似的特点封装成类,而类中的属性和方法只放和业务相关的属性和方法。同时,在创建类之前,我们最好去使用类图来模拟一下类的属性和方法,使对应的类变得直观、容易理解

          构造方法

        首先,我们需要明确,构造方法的一个目的就是为了在创建对象的同时就完成赋值,经过检验我们可以发现,对与java来说其本身就为我们提供了无参构造(即使我们不写也仍然存在),如果没有构造方法,我们就没有办法创建对象。

Penguin pgn = new Penguin();

对于构造方法有两个条件。

1.构造方法没有返回值类型,即访问修饰符和构造方法名中间不能加任何东西

2.构造方法名需要和类名相同

对于传参个数的不同,我们可以生成多个构造方法来供我们使用

        this关键字

在构造方法中,我们经常使用this关键字来进行参数与本类属性命名的区分,即区分同名成员变量

this关键字指向于当前类自身的对象,即他可以作为当前类的对象去调用属性和方法

这里插播一个小东西,对于super来说呢,它指向于当前类父类的对象,作为其父类对象去调用属性和方法

对于this关键字,其具体用法有三种

1.调用属性 this.health = 100;

2.调用方法 this.print();

3.调用构造方法 this(); 这里就是构造方法的具体使用,里面可以穿参来进行不同构造方法的使用,但是需要注意,如果使用构造方法,他必须在构造方法中的第一句,否则会报错

        方法重载

        方法重载(Overload):在同一类中,方法名相同,参数类型或参数个数不同,与返回值、访问修饰符无关

        static关键字

        static关键字

        static关键字一般与常量联合使用,所以一般情况下只要加上static关键字,就会被放到永久代中,永远不会被回收,其次,在静态区中不允许对非静态变量/方法直接进行访问。使用static定义方法,可用类直接调用,但是局部变量不可用static修饰。static修饰:变量、常量、方法

static分配内存 ->在方法区中

方法区存储

        1.类信息(存储.class编译文件)

        2.常量池(存储final修饰的变量、方法)

        3.静态(static修饰的变量常量和方法)

对于final来说

        1.修饰的类不可以被继承

        2.修饰变量就会转换为常量(大写)

        3.修饰常量不可修改

        4.修饰方法不可被覆盖

静态方法中,若调用非静态资源,必须要先实例化!

        封装

我们这里再次解释一下封装,深入了解一下封装

        封装:将类的某些信息隐藏在内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的好处

        1.隐藏类的实现细节

        2.方便加入控制语句

        3.方便修改系统

        4.只能通过规定方法访问数据

标准的javabean:

1.字段名:以前类中封装的属性,现在统一称为字段名

2.属性:生成的get和set方法,现在统一称为属性

3.java中所有的组件

        继承

言归正传,我们来讲本篇文章的重点——继承

继承,就是将重复代码抽取到类中,以解决代码重复性问题,消除代码冗余

继承关键字为extend

class Dog extends Pet;

对于子类来说,只能继承一个父类

        super关键字

使用super关键字,super代表父类对象,并且在子类构造方法中调用父类构造方法必须是第一句

super()不能用this()代替

子类不能继承的父类成员

1:父类进行私有化的private成员

2:父类的构造方法,子类无法继承

3:子类与父类不在同包,但是使用默认访问权限的成员

访问修饰符 protected

  • 可以修饰属性和方法
  • 本类、同包、子类可以访问

静态代码块、实例代码块、构造方法、普通方法在jvm中的执行顺序

static{
    //static静态代码块
}
{
    //实例代码块
}

        方法重写

子类把父类的某个方法覆盖

重写规则:

1.方法名相同

2.参数列表相同

3.返回值类型相同或者是其子类

4.访问权限不能严于父类

要求:

1.必须拥有继承关系

2.子类方法需要与父类方法完全一致(方法名称、参数类型、返回值类型)

3.子类方法可以修改访问修饰符,但要比父类的访问修饰符更加开放或者相同(必须同包状态下)

4.子类不可以抛出比父类更多的异常

  • super关键字来访问父类的成员        
  • super只能出现在子类的方法和构造方法中
  • super调用构造方法时,只能是第一句
  • super不能访问父类的private成员        
        抽象类

做了大量练习之后,我们可以发现父类实例化毫无意义,故我们使用抽象类,限制实例化

public abstract class Pet{};

注:

一个抽象类不一定包含抽象方法

包含抽象方法的类一定是抽象类

抽象类不可实例化!一般都定义在父类上

如若不需要方法体,可以添加abstract成为抽象类

如果父类存在抽象方法,子类必须要实现,如果子类不实现,可以将子类当前方法设为abstract,(同时子类要成为抽象类),让孙子类继承子类,继续实现该抽象方法。无论如何,父类的抽象方法必须被实现!!!

以上就是本篇文章的所有内容,如有疑问还请各位多多评论区提出!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

余阳867

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

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

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

打赏作者

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

抵扣说明:

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

余额充值