Java核心技术第四章----对象与类重难点总结

一、类之间的关系

类和类之间的关系,耦合度从高到低:
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;
    }
}

原文地址:https://www.cnblogs.com/shaoyu/p/11517754.html

时间: 2024-12-11 17:17:25

Java核心技术第四章----对象与类重难点总结的相关文章

Java核心技术(三) —— 对象与类(1)

本文将对Java程序设计的对象和类进行深入详细介绍,主要涉及以下内容: - 面向对象程序设计 - 如何创建标准Java类库中的类对象 - 如何编写自己的类 1.OOP概述 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分.在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可. OOP中,数据是第一位的,然后再考虑操作数据的算法. 1.1 类 类是构造对象的模板或蓝图,可以将类想象成制作小甜饼的切割机,将对象想象成小甜饼.由类构造对象的过程称为创建类的实

Java 核心技术 第四章 类与对象

类:构造对象的模板和蓝图.由类构造对象的过程称为创建类的实例. 对象的特征: 对象的行为 对象的状态 对象的标识 类之间的关系: 依赖 聚合 继承 对象与对象变量: new Date() new GregorianCalendar() new GregorianCalendar(1999, 11, 31) new GregorianCalendar(1999, Calendar.DECEMBER, 31) new GregorianCalendar(1999, Calendar.DECEMBER

Java核心技术第三章----Java的基本程序设计结构重难点总结

最近在看Java核心技术这本书,这里对第三章个人认为的重难点做一个总结.方便以后回顾,个人能力有限,本人菜鸟,大神勿喷,请大家多多指教. 一.位运算符 指定 A = 66(0100 0010); B = 22 (0001 0110)(这里为了简化说明支取一个字节即8位来运算) 位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能.如果要开发高效率程序,位运算符是必不可少的.位运算符用来对二进制位进行操作,包括:按位与(&).按位或(|).按位异或(^).按位取反(~).按

Java核心技术 第六章 接口和内部类

Java核心技术  第六章  接口与内部类 接口: 任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整数数值. 在Java SE 5.0中,Comparable接口已经改进为泛型类型. 接口中所有的方法自动的属于public.因此,在接口中声明方法时,不必提供关键字public. 接口中决不能含有实例域,也不能在接口中实现方法. 要让一个类使用排序服务,必须让它实现compareTo方法,因此必须实现Comparable

java基础(四章)

java基础(四章) 一.             switch结构(开关语句)的语法 switch(表达式 ){ ------- [dream1]类型为int.char case  常量1 :    ---------[dream2]case 结构可以有多个 //语句块1 break;---------[dream3]程序跳出switch结构 case  常量n:---------[dream4]常量的值不能相同 //语句块n break; default :---------- [dream

“全栈2019”Java多线程第四章:设置和获取线程名称

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第四章:设置和获取线程名称 下一章 "全栈2019"Java多线程第五章:线程睡眠sleep()方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Jav

Java核心技术之深入理解对象的生命周期

1 总体说明 Java类的初始化 对象的创建与初始化 对象的销毁 对象的复制 2 Java类的初始化 自然界的任何生物都有个由生到死的过程. 而当源代码编译成class文件被JVM的类加载器装载到内存中后,也会经历这么一个由生到死的过程,接下来就分析Java类的初始化到底做了哪些事情.这里暂时不谈JVM将class文件装载到内存的详细细节,只是从类的五种成员来观察类的初始化 之前提到过类的五种成员,包含属性,方法,构造器,代码块以及静态代码块五个部分.其中静态代码块和静态属性(也就是static

第九章 对象和类

对象和类 一 对象和类 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 类是相同属性和方法的一组对象的集合: 类是对象的类型: 1. 属性 特定的值或特征. 2. 方法 对象执行的操作,就是能做什么. 3. 定义类 JAVA程序都以类class为组织单元: 组成:属性和方法: 4. 成员变量与局部变量的区别 作用域不同: 初始值不同:Java会给成员变量默认一个初始值,而局部变量则不会: 同一个方法中不允许存在同名的局部变量名,而在不同方法中则可以: 就近原则:局部与成员同名了,优先取

java第三天学习内容回顾——java白皮书第四章

java面向对象程序设计中使用到名词理解:对象标识==一个实例的变量名.对象行为==一个类的方法.对象状态==类中的数据域(严格讲是可以发生变化的数据域): 类之间的关系:use_a,has_a,is_a三种 java中的Math类有些特殊,它只封装了功能而并不涉及数据域,所以不需要也不必隐藏数据 java中的对象变量名更像是个指针(像),声明一个对象实例后必须用new构造对象然后用=将两者链接起来,也可以用=将两个不同的对象变量连接起来,但此时需要注意,就像指针赋值一样,两个变量自此将共享同一