JavaSE核心技术——面向对象高级特性

一、类的继承
1、在Java中,在定义一个类的时候,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。
2、被继承的类成为父类(超类、基类),新的类成为子类(派生类)。
3、子类继承父类的所有属性和方法、同时也可以增加自己的属性和方法。
4、Java中只能单继承,也就是说每个子类只能有一个父类,但是,一个父类可以有多个子类。
5、继承的语法:

[修饰符] class 子类名  extends  父类名

6、类的继承的好处和优点

  1. 是编码更高效
  2. 易维护
  3. 代码的重用

7、子类实例化过程

  1. 子类实例化先实例化父类,再实例化子类。
  2. 要先调用父类构造器,父类构造器调用完毕,才调用子类构造器。

8、super()和this()关键字

  1. super()
    1.1、作用:调用父类构造器。
    1.2、只能出现在子类构造器中,且必须是第一行。
    1.3、super()中的参数,决定了调用父类的那个构造器。
    1.4、如果子类中没有出现super(),系统会默认加上super(),即调用父类的空构造器,如果父类没有空构造器,则编译出现错误。

  2. this()
    2.1、作用:调用子类构造器。
    2.2、只能写在构造器第一行。

  3. 在同一个构造器中,this()和super()不能同时出现。

    9、super.和this.关键字

    1. super.
      1.1、指向父类的引用。
      1.2、通过关键字super可以指定子类在构造时调用父类的那个构造器,达到先实例化父类,再实例化子类的目的。
      1.3、子类的构造器是默认调用父类的午餐构造器,即子类中没有用super指明调用父类的那个构造器时,实际上,编译器会默认的在第一行加上super()。
    2. this.
      2.1、指向本类的引用。
      2.2、我们知道子类在实例化时必须调用父类的构造器,实际上有的子类构
      造器也可以先调用本类的其他构造器,然后再通过那个构造器调用父
      类的构造器
      2.3、 无论是调用父类的构造器还是子类的构造器,最终都是找到最顶级的
      父类自上而下的实例化。只要中间环节有一个构造器没找到,这个子
      类就无法完成实例化。

二、Java包的概念
1、在java中,包主要有以下用途:

  1. 包允许将类组合成较小的单元。
  2. 有助于避免命名重名。
  3. 包允许在更广的范围内保护类、数据和方法。

2、包可以是类、接口和子包的集合。
3、import导入包中的类。

  • 导入包中所有类:
import  包名.*;
  • 导入子包中所有类:
import 包名.子包名.*;
  • 导入包中某个类:
import 包名.子包名.类;

三、权限访问操作符
1、使用权限修饰符对类的成员进行控制,在Java中称为封装。不过不要把封装理解成private,不要误认为不能访问成员才是封装,实际上对成员访问权限的任何控制(包括public)都属于封装机制。
2、访问权限符的权限范围大小:

public > protected > friendly > private

这里写图片描述
3、封装:

隐藏属性、方法和实现细节的过程称为封装。

四、方法的覆盖
1、方法的覆盖也称为方法重写,英文override,是对父类中继承来的方法进行改造,只有在子类继承父类是才会发生。
2.方法的覆盖(重写)的规则:

在子类中的覆盖方法与父类中被覆盖的方法应具有:

 1. 相同的方法名
 2. 相同的参数列表(参数类型,参数数量,参数顺序都要相同)
 3. 相同的返回值类型
 4. 子类中的覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限

五、引用数据类型的转换
1、上溯造型
1.1、向上转型,子类转换为父类,自动转换。
1.2、前提是具有继承或者实现关系。
1.3、向上转换损失了子类新扩展的属性和方法,仅可以使用从父类中继承来的属性和方法。
2、下溯造型
2.1、将父类显示的对象转换成子类类型,属于强制转换。
2.2、曾经向上转换过的对象,才能向下转换。对象不允许不经过上溯造型而直接下溯造型。
3、instanceof运算符
3.1、用来指明经过一系列上溯造型和下溯造型的对象属于父类还是子类。
3.2、instanceof一般格式

object instanceof class        //判断某个对象是否属于某个类
object instanceof interface   //判断某个对象是否属于某个接口

返回值为boolean类型

六、多态
1、不同的对象对同一行为做出不同的响应。
2、多态存在的三个条件
2.1、要有继承或实现。
2.2、要有重写。
2.3、 父类引用指向子类对象。
3、多态的优点
3.1、简化代码
3.2、改善代码可读性和组织性
3.3、易于扩展

七、static关键字
1、static可以修饰属性、方法、方法块。
2、static 只能修饰类成员,不能修饰局部变量。
3、static修饰变量称静态变量,也称类变量,为所有对象共享。
4、用static修饰的成员变量,他们在类被载入是创建,只要类存在,它们就存在。
5、两种方式访问:

直接访问:类名.属性;
实例化后访问:对象名.属性;

6、static修饰方法称静态方法,也称类方法,不需要实例化,可以直接访问。
7、两种方式访问:

直接访问:类名.方法名();
实例化后访问:对象名.方法名();

8、static方法的作用
8.1、简化方法的使用
8.2、便于访问静态属性
9、静态方法只能直接访问静态成员,而不能直接访问类中非静态成员。
10、静态方法中不能使用this、super关键字。
11、静态方法不能被非静态方法覆盖,静态方法不能修饰构造器。
12、一个类中由static关键字修饰的,不包含在任何方法体中的代码块。
13、当类被载入时,静态代码块被执行,且只被执行一次。
14、 静态块经常用来进行类属性的初始化
八、单例模式
1、保证一个类只有一个实例,并提供一个访问它的全局访问点。
2、单例模式要点:
– 某个类只能有一个实例
– 它必须自行创建这个示例
– 必须自行向整个系统提供这个实例
3、单例模式实现:
– 拥有一个私有构造器
– 提供一个自身静态私有的成员变量
– 提供一个公有的静态公有的方法
九、final关键字
1、final可以修饰的元素:
1.1、类(不能被继承)
1.2、变量(属性和局部变量):不能被重新赋值
1.2.1、 在声明时赋值,或在构造器中赋值
1.2.2、系统不会对final属性默认的赋初始值
1.3、方法:不能在子类中被覆盖,即不能修改。
十、抽象类
1、抽象类是抽象方法和非抽象方法的集合,可以所有方法都是抽象方法,也可以所有方法都是非抽象方法

[访问权限修饰符] abstract class 类名 {
        ……
}

2、抽象方法是只有方法声明,没有方法实现的方法

[访问权限修饰符] abstract 返回值类型  抽象方法名 (参数列表)

3、抽象类规则

注意:
     抽象类不能被实例化。
     其包含的抽象方法必须在其子类中被实现,否则该子类必须定义为抽象类。
     抽象方法不能为static。
 在下列情况下,一个类必须被声明为抽象类
     当一个类有一个或多个抽象方法时。
     当一个类是抽象类的子类时,且没有实现父类中的所有抽象方法时,即只实现部分。
     当一个类实现一个接口时,不能为所有抽象方法提供实现。

十一、接口

1、接口中只包含抽象方法和常量,而没有变量 和抽象方法的实现。
2、接口对类来说时一种规范,是一种行为协议
3、接口不是类,没有构造器,不能被实例化,用interface来定义,而不是class。
4、接口默认:

常量:public static final
抽象方法:public abstract

5、接口可以实现多继承

    用接口可以实现混合类型(主类型,副类型),java 中可以过接口分出主次类型
    主类型使用继承,副类型,使用接口实现
    接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性
    针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能

6、类实现接口 — implements

    为了使用一个接口,你要编写实现接口的类
    如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类
    多个无关的类可以实现一个接口,一个类可以实现多个无关的接口
    一个类可以在继承一个父类的同时,实现一个或多个接口

7、接口与抽象类对比



 1. 接口不能含有任何非抽象方法,而抽象类可以;
 2. 类可以实现多个接口,但只能有一个父类;
 3. 接口和接口之间可以实现多继承。
 4. 抽象类可以理解为抽象方法和非抽象方法的混合体,而接口中的方法完全是抽象方法,是一套纯粹的规范。一般来说,有关系的类才能继承同一个抽象类,而无关的类不可能有同一个抽象父类,但是无关的类可以实现同一个接口。

十二、内部类
1、内部类就是定义在另一个类内部的类。
2、内部类对于同一包中的其它类来说,内部类能够隐藏起来。

注意
    内部类可以访问其外部类中的所有属性和方法
    无需创建外部类的对象,内部类即可访问外部类的变量和方法
    必须创建内部类的对象,外部类才可以访问内部类的变量和方法
    如果内部类和外部类中有同名的变量或方法,则内部类的变量或方法获得更高的优先级
    不能定义static变量

3、一个类只会被这个类所调用,其他类不会使用他,你可以把它定义成一内部类,这样可以隐藏实现细节,避免错误的调用。

普通类的访问权限修饰符
                 default      public
内部类的访问全新修饰符
                default       public    protected     private

4、用static标识的内部类为静态内部类。
5、静态内部类作为外部类的静态成员,不能访问外部类的非晶态成员
6、非静态内部类只能定义非静态成员,而静态内部类可以定义静态成员和非静态成员。

猜你喜欢

转载自blog.csdn.net/qq_37067955/article/details/81782552
今日推荐