zoukankan      html  css  js  c++  java
  • 孙卫琴java面向对象编程学习笔记

    关于子类覆盖父类中的方法:
    1.Java中子类可以覆盖父类中的方法,必须保证方法的返回类型,方法的签名相同。一旦有一个子类的方法签名与父类中的某一个方法的签名相同,则编译器会将子类的该方法视为是父类方法的覆盖,所以子类方法的返回值与父类必须相同。
    2.方法覆盖中子类方法不能缩小父类方法的访问权限。例如父类方法是public的,子类方法不能是默认修饰,protected,private修饰。(防止与多态冲突)
    3.子类方法不能抛出比父类方法更多的异常。
    4.方法覆盖只能是在子类和父类之间,一个类中只能是方法重载。
    5.父类的静态方法不能被覆盖成非静态方法。
    6.子类可以覆盖父类中的静态方法,用以屏蔽父类中的静态方法。
    7。父类的非静态方法不能被子类覆盖为静态方法。
    8.父类的私有方法不能被子类覆盖。
    9.父类的抽象方法可以被子类通过两中途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。
    10.父类的非抽象方法可以被子类覆盖成抽象方法。

    动态绑定:
    1.实例方法与引用变量实际引用的对象的方法绑定,这种绑定属入动态绑定,因为是在运行时由java虚拟机动态决定的。
    2.静态方法与引用变量所声明的类型的方法绑定,这种绑定属入静态绑定,因为实际上是在编译阶段就已经确定的。
    3。成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定术语静态绑定,因为实际上是在编译阶段就已经做了绑定

    访问权限:
    1.public权限修饰的成员变量可以被所有类访问;protected权限修饰的成员变量可以被子类、同包中的类访问;默认(default)修饰的成员变量可以被同包中的类访问;private修饰的成员变量只能被自己类中的成员访问。

    final修饰的成员变量必须显示进行赋值。
    用static修饰的程序代码块表示静态代码块,当java虚拟机加载类的时候,就会自动执行该代码块。
    接口中的成员变量默认是public,static,final修饰的。接口中的方法默认都是public,abstract的。

    接口中的几种设计模式:
    1.定制服务模式:当一个类提供许多不同服务(每一个服务有不同的内容)时,可以使各个服务为一个接口,类中继承不同的接口,定制不同的服务。
    2.适配器模式 (1).继承实现方式:A1类继承B1类,A1类实现A接口中的方法,B1类实现B接口中的方法。A1类扩展B1中未有的方法,以使得C类在继承A1类后,可以使用B1类中的方法和A1类中的方法。
    (2)默认适配器方式:A接口包含n个抽象方法,B类欲实现A接口中的一个方法,则必须提供n-1个空方法。可以定义一个类C,类C implement接口B,不过其中各个方法都是空方法,当欲使用接口A中的一个方法时,可以定义类使类继承类C.
    (3)代理模式:
    (4)标示类型模式:定义一个接口,该接口无任何成员,只是为implement它的类,表示一下。例如Food可以标示Rice,Fish等。
    (5)常量接口模式:接口中只定义常量,无方法。import static 类/接口 ,可以使用类或者接口中的static常量。

    发现异常时会使用方法栈的回溯来寻找异常处理代码。
    异常抛出后,后面的代码不会在执行。例如
    int methodA(int a) throw SpecialException
    {
    if(a<0) throw new SpecialException();
    System.out.println("木有异常!");
    }
    如果发生异常,则“木有异常”不会被打印。由此引入了finally

    throw和throws不一样,需要主要,throw用于throw语句中,抛出异常。throws用于方法中,指定方法可能抛出的异常。
    在try语句块中定义的变量,在catch和finally中不能访问。
    throw语句后面不能在跟其他语句,跟的语句将不会再执行。

    异常流程的运行过程
    1.finally语句不能被执行的唯一情况是,先执行了用于终止程序的System.exit()方法,java.lang.System的静态方法exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序也随之终止。
    2.return语句用于退出本方法,在执行try或catch代码块中的return语句时,假如有finally代码块,会先执行finally代码块。finally代码块虽然在return语句之前被执行,但finally代码块不能通过重新给变量赋值的方法来改变return语句的返回值。
    例如:
    public static test()
    {
    int a=1;
    try{
    return a;
    }
    finally
    {
    a=0;
    }

    }程序先执行a=0,但是test()函数的返回值还是1.
    3.建议不要在finally代码块中使用return语句,它会导致两种潜在的错误。第一种:覆盖try或catch代码快中的return语句。第二种:丢失错误(finally中设有返回值,则其他地方的返回值会被覆盖掉)。


    在以下情况下,可以把类的构造方法定义为private修饰的:
    1.在这个类中仅仅包含了一些供其他程序调用的静态方法,没有任何实例方法。
    2.禁止这个类被继承。与final类的区别在于,final类可以在其他类中定义,private修饰的构造方法,类的定义只能在本类中。
    3.不想透露构造方法的实现细节,通过静态方法定义新类。

    单例类:单例类是指仅有一个实例的类,在系统中具有唯一性的组件可以作为单例类,这种类的实例通常会占用较多的内存,或者实例的初始化比较冗长,映出随意创建这些类的实例会影响系统的性能。
    实现单例类有两种方法:
    1.把构造方法定义为private类型,提供public static final类型的静态变量,该变量引用类的唯一实例。
    2.把构造方法定义为private类型,提供public static类型的静态工厂方法。


    内部类:
    1.实例内部类:实例内部类是成员内部类的一种,没有static修饰。
    (1)在创建实例内部类的实例时,外部类的实例必须已经存在。
    (2)内部类可以访问外部类的成员
    (3)外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例可以对应多个内部类实例。外部类不能访问内部类的成员,除非通过访问内部类实例的方法。
    (4)在实例内部类中不能定义静态成员,而只能定义实例成员。
    2.静态内部类:内部类使用static修饰
    (1)静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例。将静态内部类视为外部类的一个静态成员。
    (2)在静态内部类中可以定义静态成员和实例成员。
    (3)可以直接使用outerClass.innerClass.的方法访问静态内部类的静态成员。
    局部内部类:局部内部类是在一个方法中定义的内部类,局部内部类不能用访问控制修饰符及static修饰符来修饰。
    (1)局部内部类和实例内部类一样,不能包含静态成员。
    (2)局部内部类和实例内部类一样,可以访问外部内的所有成员,此外,局部内部类还可以访问所在方法中的final类型的参数和变量。

  • 相关阅读:
    Docker——搭建SFTP
    PicGo——利用PicGo和GitHub搭建免费图床提供给Typecho使用
    GitHub——如何生成Personal access tokens
    leetcode——两数相加【二】
    每天一道面试题——请实现add(1,2)(3)【二】
    leetcode——两数之和【一】
    每天一道面试题——JavaScript的this指向【一】
    PHP——安装ThinkPHP框架报错
    项目代码 if/else 过多,引起程序猿口吐莲花
    JDK9-JDK14 相关新特性说明及使用
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2669175.html
Copyright © 2011-2022 走看看