• 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修饰成员变量初始化的时机:

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

  • 相关阅读:
    HDU
    CodeForces
    CodeForces
    TensorFlow下利用MNIST训练模型并识别自己手写的数字
    李宏毅机器学习笔记2:Gradient Descent(附带详细的原理推导过程)
    李宏毅机器学习笔记1:Regression、Error
    tensorflow相关API的学习
    解决winscp中普通用户无法上传、删除、移动文件
    2019最新最全HUSTOJ本地及云端服务器搭建(基于腾讯云服务器)
    解决Ubuntu无法进行SSH连接的问题(以及如何使用SSH)
  • 原文地址:https://www.cnblogs.com/songliuzhan/p/12624131.html
Copyright © 2020-2023  润新知