(JAVA):学习面向对象时,需要注意的细节-----重点第一部分。

举报
小黎的培培笔录 发表于 2022/04/18 18:48:46 2022/04/18
【摘要】 多态:是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象调用同样的方法但是做了不同的事情。也就是方法或对象具体有多种形态,是OOP的第三大特征。

 目录

一、继承的细节问题

二、super和this关键字

 super关键字:

两者进行比较: 

三、方法重写细节 

重写细节

重写和重载比较

 四、多态 

♥♥♥什么是多态?

♠♠♠多态具体体现在哪里?

五、多态的向上转型和向下转型 

↖↑↗向上转型:

↙↓↘向下转型:

 六、instanceOf 比较操作符 


一、继承的细节问题

1、子类继承了所有的属性和方法,非私有的属性和方法可以可以在子类直接访问,但是私有的属性和方法不能在子类直接访问,要通过公共的方法去访问。

2、子类必须调用父类的构造器,完成父类的初始化。

3、当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。

4、如果希望指定去调用父类的某个构造器,则显示的调用一下:super(参数列表)。

5、super在使用时,必须放在构造器的第一行(super只能在构造器中使用)。

6、super() 和 this() 都只能放在构造器的第一行,因此这两个方法不能共存在一个构造器中。

7、Java所有类都是Object类的子类。

8、父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)。

9、子类最多只能继承一个父类(指直接继承),即Java中是单继承机制。

10、不能滥用继承,子类和父类之间必须满足 is- a 的逻辑关系。


二、super和this关键字

 super关键字:

1、调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)。

2、当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问是一样的效果。

两者进行比较: 

 

区别点

this

super

1

访问属性

访问本类中的属性,如果本类没有此属性则从父类中继续查找

访问父类中的属性

2

调用方法

访问本类中的方法,如果本类没有此方法则从父类继续查找

直接访问父类中的方法

3

调用构造器

调用本类的构造器,必须放在构造器的首行

调用父类构造器,必须放在子类构造器的首行

4

特殊

表示当前对象

子类中访问父类对象


三、方法重写细节 

重写细节

 1、子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一致。

 2、子类方法的返回值类型和父类方法返回值类型一样,或者是父类返回类型的子类。

 3、子类方法不能缩小父类方法的访问权限。

重写和重载比较

名称

发生范围

方法名

形参列表

返回类型

修饰符

重载

本类

必须一样

类型个数或者顺序至少一有个不同

无要求

无要求

重写

父子类

必须一样

相同

子类重写的方法返回类型和父类返回的类型一致,或者是其子类

子类方法不能缩小父类方法的访问范围


 四、多态 

♥♥♥什么是多态?

        多态的前提是:两个对象(类)存在继承关系。

        多态:是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象调用同样的方法但是做了不同的事情。也就是方法或对象具体有多种形态,是OOP的第三大特征。

♠♠♠多态具体体现在哪里?

         方法多态:

                 重载体现多态

                 重写体现多态

         对象多态:

                 一个对象的编译类型和运行类型可以不一致

                 编译类型在定义对象时,就确定了,不能改变

                 运行类型是可以改变的

                 编译类型看定义时  “=”号的左边,运行类型看 “=”号的右边

            注意:

                         属性没有重写的说法!属性的值看编译类型


五、多态的向上转型和向下转型 

↖↑↗向上转型:

        本质:父类的引用指向了子类的对象

        语法:父类类型   引用名  =  new  子类类型()

        特点: 编译类型看左边,运行类型看右边

                         可以调用父类中的所有成员(需要遵守访问权限)

                         不能调用子类中特有的成员

                         最终运行效果看子类的具体实现   

         调用方法的规则:   

                          可以调用父类中的所有成员方法(需要遵守访问权限),但是不能调用子类中特有的成员方法。因为在编译阶段,能调用哪些成员,是由编译类型来决定的,最终的运行效果看子类(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始查找的方式一步一步向上查找,直到找到为止。            


↙↓↘向下转型:

        本质:子类引用指向父类对象

        语法:子类类型   引用名  =  (子类类型)父类引用

        特点: 只能强转父类引用,不能强转父类的对象

                         要求父类的引用必须指向的是当前目标类型的对象

                         当向下转型后,可以调用子类类型中的所有成员


★★★ Java的动态绑定机制:

          ☋☋☋ 当调用对象方法时,该方法会和该对象的内存地址 / 运行类型绑定

          ☊☊☊ 当调用属性时,没有动态绑定机制,哪里声明,哪里使用


 六、instanceOf 比较操作符 

  • 描述:

        ○ instanceOf 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

        ○ instanceOf 是 Java 的保留关键字。用于判断对象的类型是否为XX类型或XX类型的               子类型,返回布尔 的数据类型。

  • 代码示例:
public class case223 {

    public static void main(String[] args) {

 

        A b = new B(); //向上转型

        

        //判断b对象的类型是否为A类型或A类型的子类型

        if(b instanceof A){

            System.out.println("true");

        }else{

            System.out.println("false");

        }

 

    }

}

 

class A{}

 

class B extends A{}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。