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

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

目录

♛一、继承的细节问题

♕二、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{}


相关文章
|
4天前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
34 18
|
17天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
79 6
【Java学习】多线程&JUC万字超详解
|
8天前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
25 2
|
1月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
1月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
1月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
40 2
【前端学java】如何从前端视角快速学习Maven
|
3天前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!
|
28天前
|
Java 开发者 C++
|
30天前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
20 1
|
20天前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。