Java基础编程学习笔记(中)(二)

简介: Java基础编程学习笔记(中)(二)

面向对象(中)


一、面向对象的特征之二:继承性


* 一.继承性的好处:

* ① 减少代码的冗余,提高了代码的复用性

* ② 便于功能的扩展

* ③ 为之后多态性的使用,提供了前提

*

* 二.继承性的格式:  class A extends B{}

*    A:子类,派生类,subclass

*    B:父类,超类,基类,superclass

*    

*    2.1体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的结构中所有的属性和方法

*        特别的:父类中声明为private的属性和方法,子类继承父类以后,仍然认为获取了父类中私有的结构。因为有封装性的影响,使子类不能直接调用父类的结构而已

*    2.2子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展

*        子类合父类发关系,不同于子集和集合的关系

*        

* 三.Java中关于继承性的规定:

*    1.一个类可以被多个子类继承

*    2.Java中类的单继承性:一个类只能有一个父类

*    3.子父类是相对的概念

*    4.子类直接继承的父类叫做直接父类,间接继承的父类为间接父类

*    5.子类继承父类以后,就获取了直接父类以及所有简介父类中声明的属性与方法


* 四.1.如果我们没有显示的声明一个类的父类,则此类就继承于java.lang.Object类    

*       2.所有的Java类(除java.lang.Object类之外)都直接或间接的继承于Java.lang.Object类

*       3.意味着:所有的java类具有java.lang.Object类声明的功能

*


二、方法的重写


* 方法的重写(override / overwrite)

*

* 1.重写:子类继承父类以后要对从父类中继承来的方法进行改造,也称 为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。

*

* 2.应用:重写以后,当创建子类对象以后,通过子类对象调用字符类中的同名同参数的方法时,实际执行的是子类重写父类的方法

*

* 3.重写的要求与规定:


1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表


2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型


3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限



*             方法的声明:权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{

*                             //方法体

*                         }

*             约定俗称:子类中的叫重写方法,父类中的叫被重写的方法

*             ① 子类重写的方法的方法名和形参列表与父类被重写的方法名和形参列表相同

*             ② 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符

*                  >>特殊情况:子类中不能重写父类中private权限的方法(具体查看异常处理)

*             ③ 返回值类型:

*                 >如果父类被重写的方法的返回值是是void,则子类重写的方法的返回值类型只能是void        

*                 >父类被重写的方法的返回值类型是A类,则子类重写的方法的返回值类型可以是A类或A类的子类

*                >父类被重写的方法的返回值是基本数据类型(比如:double),则子类重写的方法的返回值必须是相同的基本数据类型(double)

*             ④ 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

* **************************************

*             子类和父类中同名同参数的方法要么都声明为非static的(非static的),要么都声明为static的(不是重写)

*


三、四种访问权限修饰符


f79f76cdc9fa857e63b34ea5b6e59fd2_01d2213fb17e4ed785d4cbb76363915c.png


四、关键字—super


① super关键字的使用

* 1.super理解为:父类的

* 2.super可以用来调用:属性、方法、构造器

*

* 3.super的使用:

*

*         3.1 我们可以在子类的方法或构造器中通过使用“super.属性”或“super.方法”的方式显示调用父类中声明的属性或方法

*             但通常情况下,我们习惯省略“super.”

*         3.2 特殊情况下:当子类和父类当中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显示的使用

*             “super.属性”,表明调用的是父类中调用的属性

*         3.3 特殊情况下:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显示的

*             使用“super.方法”的方式,表明调用的是父类中被重写的方法

*    

* 4.super来调用构造器

*         4.1 我们可以在子类的构造器中显示的使用“super(形参列表)”的方式,调用父类中声明的指定构造器

*         4.2 “super(形参列表)”的使用,必须声明在子类构造器的首行!

*         4.3 我们在类的构造器中,针对于“this(形参列表)”或“super(形参列表)”只能二选一,不能同时出现

*         4.4 在构造器的首行,没有显示的声明“this(形参列表)”或“super(形参列表)”则默认调用的是父类在空参的构造器super();

*         4.5 在类的多个构造器中至少有一个类的构造器中,至少有一个类的构造器中使用了“super(形参列表)”,调用父类中的构造器


②this与super的区别


2bfe0b8310959260b26f00f2b98caf59_36c7420341a84f5bb075aca909c9c21f.png


五、面向对象特征之三:多态性


对象的多态性:父类的引用指向子类的对象


946a8b32a8d0212515464d904a5781c3_a989e8456f46492a94696cbb8c89a033.png


注意:


9137e1bc6a6bc27dcee699cb9214fa30_db552fbd3fa645ee908aa9d70e091aa6.png


重载 vs 重写:


13142e5f967fbe332016c666db441a4c_a90eb5fd335440b0a4dd7be55a280ab1.png


instanceof操作符


cc19544e09173c556346cc6cd400b599_08a832b94a3c4c4cbb73a8afe60e3af1.png


六、包装类(Wrapper)的使用


87a0ae1227e2baf551cd484c2b2778f8_4b4602baba2c474498f7664c4aaaa302.png


0ec21410700b94941a6fc3b581db4b2d_6d1eac4a4dc44c1981daaf2764ba33ee.png



ed79be95bbff21fa48778eae2e064e77_e58c04c038b944d9a1ded16402aba9a9.png

目录
相关文章
|
2月前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
1月前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
13天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
16天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
50 12
|
13天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
93 2
|
2月前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
2月前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
30天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
30天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
50 3
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
49 3