zoukankan      html  css  js  c++  java
  • JAVA_SE_笔记整理(面向对象二)

    面向对象

    1、继承:

    继承概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。原因。

    用法:class 子类名 extends 父类{}

    单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

    继承的好处:

    提高了代码的复用性,多个类的相同成员可以放到同一个类中。

    提高了代码的维护性,如果功能更改只需修改一处。

    让类与类之间产生了关系,是多态的前提:弊端,类的耦合性增强。

    代码设计原则:高内聚低耦合

    简单的理解:

    内聚就是自己完成某件事情的能力。

    耦合就是类与类之间的关系。

    我们在设计的时候原则是:自己能完成的就不麻烦别人,这样将来别人产生了修改,就对我的影响较小。

    由此可见:在开发中使用继承其实是在使用一把双刃剑。今天我们还是以继承的好处来使用,因为继承还有很多其他的特性。

    继承的特点:

    java只支持单继承,不支持多继承。

    一个类只能有一个父类,不可以有多个父类。

    // class SubDemo extends Demo{} // 是可以的。

    // class SubDemo extends Demo1, Demo2{} // 不可以多个爹

    java支持多层继承(继承体系)

    class A{}
    class B extends A {}

    class C extends B {}

    注意事项:

    子类只能继承父类所有非私有的成员(成员方法和成员变量),可以继承父类的静态非私有属性。

    其实这也体现了继承的另一个弊端:打破了封装性

    子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

    不要为了部分功能而去继承。

    继承中成员变量的关系:

    子父类中同名和不同名的成员变量:

    子类中访问一个变量

    首先在子类局部范围内找

    然后在子类的成员范围找

    最后在父类成员范围找(肯定不能访问到父类局部范围)

    如果还是没有找到就报错。

    2super关键

    super的用法和this很像

    this代表本类对象的引用

    super代表父类存储空间的标识(可以理解为父类对象的引用)

    用法(this和super均可如下使用)

    访问成员变量:

    this.成员变量 super.成员变量

    访问构造方法(子父类的构造问题讲)

    this(…) super(…)

    成员方法(子父类的成员方法问题讲)

    this.成员方法() super.成员方法()

    3、继承中构造方法的关系

    子类中所有的构造方法默认都会访问父类的无参构造方法。

    因为子类会继承父类中的数据,可以还会使用父类的数据。所有子类初始化之前,一定要先完成父类数据初始化。

    每一个构造方法第一条语句默认都是:super();

    如果自行显示调用,就不会默认调用super();

     

    子类通过super去显示调用父类其他的带参的构造方法

    子类通过this去调用本类的其他构造方法

    本类其他构造也必须首先访问了父类构造

    一定要注意:

    super(…)或者this(….)必须出现在第一条语句

    否则报错。

    4、代码块

    什么是代码块?

    可以执行的代码段,简称代码块,{}中

    三种:普通代码块,构造代码块,静态代码块。

    普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”代码块中定义变量只在代码块中有效。

    构造代码块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

    静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。 //如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

    注意:静态代码块,不可能存在于任何方法体内

    静态代码块,不能直接访问实例变量和实例方法。需要通过实例对象来访问。

    5继承中的成员方法:

    通过子类对象去访问一个方法

    首先在子类中找

    然后在父类中找

    如果还是没有就报错。(不考虑父类的父类)

    方法重写概述:

    子类中出现了和父类中一模一样的方法声明(定义),也被称为方法覆盖,方法复写。

    使用特点:

    如果方法名不同,就调用对应的方法。

    如果方法名相同,最终使用子类自己的。

    方法重写的应用:

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

    注意事项:

    父类中的私有方法不能被重写

    子类重写父类方法时,访问权限不能更低。

    // 报错:正在尝试分配更低的访问权限; 以前为public-》子类重写后方为权限小于父类方法权限

    父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解)

    6final关键字

    final关键字是最终的意思,可以修饰类,成员变量,成员方法。

    修饰类,类不能被继承

    修饰方法,方法不能被重写

    修饰变量,变量就变成了常量,只能被赋值一次。普通变量被修饰成为局部常量。成员变量被修饰,成员常量。成员常量只能在构造方法及构造方法之前进行初始化。否则不允许初始化。

    修饰成员变量:

    基本类型,是值不能被改变

    引用类型,是地址值不能被改变

    final修饰成员变量初始化的时机:

    在对象构造完毕前即可 (必须只赋值一次,不能重复赋值)

  • 相关阅读:
    Unable To Open Database After ASM Upgrade From Release 11.1 To Release 11.2
    11g Understanding Automatic Diagnostic Repository.
    How to perform Rolling UpgradeDowngrade in 11g ASM
    Oracle 11.2.0.2 Patch 说明
    Pattern Matching Metacharacters For asm_diskstring
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    Upgrading ASM instance from Oracle 10.1 to Oracle 10.2. (Single Instance)
    OCSSD.BIN Process is Running in a NonRAC Environment
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    On RAC, expdp Removes the Service Name [ID 1269319.1]
  • 原文地址:https://www.cnblogs.com/songliuzhan/p/12624131.html
Copyright © 2011-2022 走看看