java学习笔记最难理解的多态

 

专题 封装和继承和多态

1、 封装:①方法②类③包

2、 继承:

使用父类的方法和属性。

子类会继承父类权限允许的属性和方法。

父类的构造方法不能被继承。

继承现象总结:

    1. 子类重写父类方法,调用子类方法;

    2. 子类属性与父类同名(不管子类属性前修饰符如何均允许),如获取属性,看获取属性方法位置,如在父类中,获取的是父类属性,如在子类中,获取的是子类属性;

    3. 子类私有方法与父类私有方法同名,如调用该方法,看私有方法被调用的位置,如在父类中,调用的是父类方法,如在子类中,调用的是子类方法;

    4. 子类静态方法与父类静态方法同名,子类静态方法屏蔽父类静态方法。如调用该静态方法,看实例化对象时所声明的类型,如声明为父类,调用的是父类中静态方法,反之是子类中静态方法。

3、 多态:相同的操作作用于不同的对象产生不同的行为。

对象多态:某个小范围类的对象可以是更大范围的类的对象的引用,即父类指向子类的对象。(例:People s = new Student())

操作多态:不同的对象作用于同一个方法产生不同的行为。

接口多态:不同的类实现不同的接口功能不同。

注:不同对象执行相同方法时的多态

4、分类

强制多态     参数多态      过载多态

5、多态的俩中描述:

    1.一个父类类型的引用可以指向他任何一个子类的对象

    2.[相同]类域的[不同]对象执行[同一]方法的时候会有[不同]的表现

多态是出现在具有继承关系的两个类的对象之间,所以它不像方法重载(发生在一个类中)在编译期间发生(也就是确定下来),而是在运行期间发生(确定下来)。

    Java中的方法是在代码运行时动态绑定的。

对象详解

类对象包含属性,方法,引用类型的变量(this和super)

如图所示:

创建对象的步骤:①在内存中开辟一块空间

②将属性和方法及this和super赋值到这块空间。

对象创建的执行流程:最先执行父类的构造方法初始化环境,直到子类的构造方法。


注:该类的某个对象只能调用本类的方法和属性。

如果用父类类型的变量去调用方法,必须要保证该方法在父子类之间有过重写。

 

重写和重载(方法)

1、重写

存在条件:父类和子类中重视至少两个类

重写条件:①返回值类型相同②方法名必须相同③参数必须相同

注意:如果返回值是引用类型(类类型)则允许子类重写的方法返回值类型是父类返回值类型的子类(返回值是类型间是父子关系)

 

重写的重点:父类中的private和static修饰的方法不能被子类重写

重写后方法的修饰符范围不能被缩小(范围由小到大;private 友好的 protected public)

重写后方法抛出的异常不能被扩大(即如果父类方法抛出的是exception的子类,则重写后抛出的异常不能是exception。)

几点强制特点:①父类的实例方法不能被重写为static的方法②子类和父类同名的static方法是两个不同的方法;③private修饰的方法不能被重写;④static修饰的方法不能被重写。

1、 重载

存在条件:同一个类中

重载条件:方法名相同,参数不同(参数类型,顺序,参数个数)

重载方法调用的方式:按照参数去调用,否则以最兼容的方法去执行。

注:按照最兼容去加载可能会出现重载的二义性。(当传入参数能隐式的转换为某两个方法参数类型时)

重载的方法返回值可以不同。

 

专题 static

static修饰符可以用来修饰类的成员变量、成员方法和代码块(匿名代码块)。

用static修饰的成员变量表示静态变量,可以直接通过类名来访问;

用static修饰的成员方法表示静态方法,可以直接通过类名来访问;

用static修饰的程序代码表示静态代码块,当Java虚似机加载类时,就会执行该代码块;

一、static修饰的属性

特点:所有方法所共享

访问方式:既可以由对象访问,也可以直接由类名访问(类名可以省略)。

注:都是全局变量,没有static修饰的局部变量。

二、Static修饰的方法

特点:所有对象共享

访问方式:既可以由对象访问,也可以直接由类名访问(类名可以省略)。

静态方法中,不可以访问非静态的方法

非静态的方法中可以调用静态的方法。

          省略:当前类中调用可以省略。

注:1) 不能使用this关键字;

    2) 不能使用super关键字,super关键字用来访问当前实例从父类中继承的方法和属性。super关键字与类的特定实例相关;

     3) 静态方法必须被实现。静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。既然如此,当前类必须为静态方法提供实现。

匿名代码块:只能执行一次(在构造器执行之前执行一次),用{}包裹即可。

可以有多个,按顺序流程执行。

构造方法是匿名代码块的代替,构造方法能做到的匿名代码块不一定做到,但匿名代码块能做到的,构造方法一定能做到。

静态代码块:static{}

只执行一次,只能使用静态的属性和方法。

作用:往往用于加载配置文件。

注:方法名是为了方便我们多次调用该方法。

三、类加载流程:1.之前没有进行类加载

                          1.类加载,同时初始化类中静态的属性(赋默认值)

                          2.执行静态代码块

                  注:如果做过类加载从第三步执行。

                          3.分配内存空间,同时初始化非静态的属性(赋默认值)

                          4.调用父类构造器

                  5.父类构造器执行完后,如果自己声明属性的同时有显示的赋值,那么进行显示赋值把默认值覆盖

                          6.执行匿名代码块

                          7.执行构造器

                          8.返回内存地址

四、静态导入:import static+静态属性和方法

 

专题 final

含义:最终的,不能被修改的。

一、final修饰的类

①不能被继承

二、final修饰的属性

         ①修饰的局部变量和全局变量不能被修改

         ②修饰常量

注:final修饰的全局变量必须赋值(位置,声明和匿名代码块及构造器)

         final修饰的static变量必须赋值(位置,声明和static代码块)

三、final修饰的方法

         ①不允许子类重写

专题 abstract

含义:抽象的。

一、abstract修饰的类

         ①可以有抽象方法和实例方法和属性

         ②当某个类继承自一个抽象类必须重写抽象方法,给出方法体,并显式的删掉abstract。

         ③抽象类没有对象。

         ④抽象类可以继承抽象类,方法也可以(可以只重写某个方法为抽象方法)。

⑤抽象类及抽象方法不能被final修饰符修饰。

⑥有构造器。

二、abstract修饰的方法

         ①没有方法体。

         ②只能存在于抽象类中。

专题 interface

含义:接口

格式:interface 接口名{}

①默认接口中的方法是public 和abstract修饰的。

②接口中的属性都是final 、static和final修饰的(常量)。

③没有匿名代码块和工作方法以及static代码块。

 

Implements

实现接口:

抽象方法可以实现接口减少实现接口的方法数量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值