一、类之间的关系

类和类之间的关系,耦合度从高到低:

is -a。继承、实现

has-a。组合、聚合、关联

user-a。依赖。

要求是:高内聚、低耦合。

继承(“is-a”)

继承(Inheritance),即“is-a”关系,是一种用于表示特殊与一般关系的。表示类与类(或者接口与接口)之间的父子关系。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。在JAVA中,用关键字extends表示继承关系

实现(Implementation),表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。

关联(“has-a”)

是类与类之间的联接。它使一个类知道另一个类的属性和方法。 对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联可以是双向的,也可以是单向的。在JAVA中,关联关系一般使用成员变量来实现。 在JAVA中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

单向关联:

双向关联:

class Car {

public static void run(){

System.out.println("汽车在奔跑");

}

}

class Driver {

//使用成员变量形式实现关联

Car mycar;

public void drive(){

mycar.run();

}

}

依赖(“has-a”)

是一种最明显的、最常见的关系。依赖关系表示一个类依赖于另一个类的定义,一个类的方法操纵另一个类的对象。一般而言,依赖关系在JAVA中体现为局域变量、方法的形参,或者对静态方法的调用。

例如,一个人(Driver)可以开车(Car),Driver类依赖于Car类的定义,因为Driver类引用了Car。与关联不同的是,Driver类里并没有Car类型的属性,Car的实例是以参量的方式传入到Driver类的方法中去的。

class Car {

public static void run(){

System.out.println("汽车在奔跑");

}

}

class Driver {

//使用形参方式发生依赖关系

public void drive1(Car car){

car.run();

}

//使用局部变量发生依赖关系

public void drive2(){

Car car = new Car();

car.run();

}

//使用静态变量发生依赖关系

public void drive3(){

Car.run();

}

}

二、Java类的访问权限

Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。

1、 private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

2、default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

3、protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。

下面用表格的形式来展示四种访问权限之间的异同点,这样会更加形象。表格如下所示:

三、final关键词的作用

1、final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。

这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。

而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。

例如:类中有一个属性是final Person p=new Person("name"); 那么你不能对p进行重新赋值,但是可以改变p里面属性的值,p.setName('newName');

final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。

2、final修饰类中的方法

作用:可以被继承,但继承后不能被重写。

3、final修饰类

作用:类不可以被继承。

四、static关键词的作用

1、static可以修饰变量,方法

2、被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。

3、在类被加载的时候,就会去加载被static修饰的部分。

4、被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

五、Java对象是否采用的是引用调用

不是,在Java调用方法是采用“单向传值”,即调用方法时会将实参的值或地址拷贝一份给形参。形参的值(或地址)发生变化与实参无关,但如果是引用类型的可以改变所指对象中的值。

也就是说调用方法是无法进行交换的无论是数值类型还是引用类型的变量,但可以改变引用类型所指对象的数据。

六、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分

七、构造器中调构造器

在Java中可以使用this调用此类的构造器,可以使用super调用父类的构造器

public A(int a){

this();

super();

}

八、初始化代码块

在Java中大家熟知的初始化成员变量的方法有:在声明中赋值和在构造器中设置值。其实还有第三种机制,称为初始化块。在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些快就会被执行。例如:

class A{

int a;

{

a=10;

}

}

java技术难点_Java核心技术第四章----对象与类重难点总结相关推荐

  1. CoreJava 笔记总结-第四章 对象与类

    文章目录 第四章 对象与类 使用预定义类 对象与对象变量 Java库中的LocalDate类 更改器方法和访问器方法 ==用户自定义类== 用`var`声明局部变量 使用`null`引用 隐式参数与显 ...

  2. Java核心技术卷Ⅰ-第四章对象和类

    重点 1.使用预定义类 2.方法参数 3.对象构造 4.包 5.类设计技巧 1.使用预定义类 一个源文件只能有一个公共类,可以有任意数目的非公共类 可以使用通配符调用Java编译器:javac Tes ...

  3. 深入了解java虚拟机(JVM) 第四章 对象的创建

    一.对象的创建过程 对象的创建过程大致可以分为六步,其中对象的分配尤为重要: 二.对象分配内存 一般来说对象分配内存有两种方式: 第一种是指针碰撞,这是一种比较理想的方式:如果Java堆是绝对规整的: ...

  4. java email bean_JavaWeb学习笔记-第四章JavaBean技术

    第四章 JavaBean技术 4.2.2 使用JavaBean的意义 如果使HTML代码与Java代码相分离,将Java代码单独封装成为一个处理某种业务逻辑的类,然后在JSP页面中调用此类,就可以降低 ...

  5. java class 字符串_java基础知识四 math类 字符 字符串 控制台输入输出 StringBuilder与StringBuffer...

    第四章:数学函数.字符和字符串 math类 Math是final类:在java.lang.Math中,所有数学函数都是静态方法 在一个java程序中,java.lang包中的所有类是隐式导入的. 三角 ...

  6. 【Java数据结构与算法】第四章 栈实现综合计算器

    第四章 栈实现综合计算器 文章目录 第四章 栈实现综合计算器 一.栈 1.介绍 2.应用场景 3.思路 4.代码实现 二.综合计算器 v1.0 1.思路 2.代码实现 三.前缀.中缀和后缀表达式规则 ...

  7. college java (java基础黑皮书)一到四章笔记总结

    college java(1-4) college java (java基础黑皮书) 第一章 java入门 java的地位 java的特点与组成: 简单的java程序 1.系统环境的设置 2源文件的编 ...

  8. Java 北大青鸟 第一学期 第四章 选择结构(二) 上级练习+课后作业

    第一学期 第四章 选择结构二 示例1 实现购物菜单 实现换购的功能 本章练习一 计算器 下载地址 1. 选择结构 基本if选择结构 if(条件){条件成立时执行的代码} if-else选择结构 if( ...

  9. java 技术点_Java的21个技术点和知识点归纳

    1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不 ...

最新文章

  1. pytorch和jittor 程序对比
  2. Power Shell 使用图解2
  3. sqlserver 中的exec问题
  4. sqlserve 热备用状态更新_燃气地暖一个月费用多少钱?看完收藏备用
  5. 关于 web.config impersonate 帐号模拟
  6. 半监督学习的概述与思考,及其在联邦场景下的应用(续)
  7. 为什么莫名其妙的就被调用了
  8. C语言发明人丹尼斯-里奇去世
  9. matlab 带积分的方程,在Matlab中实现积分方程的迭代解
  10. Git 合并单个文件
  11. Markdown如何给图片添加图注
  12. 014_驱动模块传参数
  13. 7月算法训练------第十四天(栈)解题报告
  14. 【Office】Visio无响应问题(打开形状样式功能区即卡死)的解决方案
  15. 什么是CSDN开源社区
  16. 高可用架构的设计方法
  17. 教学计划编制源代码c语言,《数据结构C语言》教学计划编制问题.doc
  18. 实验三 字符类型及其操作(新)
  19. Transformations between ECEF and ENU coordinates
  20. 排查相机功耗问题时,影响静态亮屏功耗的几个因素

热门文章

  1. 870C. Maximum splitting
  2. 1360E. Polygon
  3. html页面 wordpress,WordPress纯代码实现前端页面HTML完美压缩
  4. 插入始终是1_OneNote使用小记(1)——针对PPT做笔记及最合适的PPT插入方式
  5. Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)
  6. sigprocmask 阻塞进程
  7. arduinowifi.send怎么获取响应_ChatterBot代码解读-获取对话
  8. goland环境配置_Goland辅助工具goimports和gomodules
  9. mysql客户端保存数据乱码_mysql客户端数据乱码问题
  10. python什么是空类型_在Python中创建真正的空类型