Java面向对象

目录

1 java 中的对象

1.1 Java 中创建对象的方式

2 Java 中的类

3 Java创建对象有几种方式?

4 有没有可能两个不相等的对象有相同的hashcode

5 拷贝和浅拷贝的区别是什么?

6 面向对象都有哪些特性以及你对这些特性的理解

6.1 封装

6.2 继承

6.3 多态


1 java 中的对象

对象拷贝:对象赋值存在栈里就是对象拷贝,存在堆里就是引用赋值

Java 使用面向对象编程(Object-Oriented Programming,OOP),这是一种编程风格,它旨在使思考编程更接近思考现实世界。

在面向对象中,每个对象都是一个独立的单位,就像现实世界中的对象一样。

看看周围真实的世界,会发现身边有很多对象,车,猫,人等等。所有这些对象都有自己的状态和行为。

拿一只猫来举例,它的状态有:猫名、猫龄、颜色,行为有:睡觉、吃食和发出声音。

对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。

在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

1.1 Java 中创建对象的方式

2 Java 中的类

一个类描述对象将是什么,但是与对象本身是分开的。

换句话说,类可以描述为对象的模板,描述或定义。

您可以使用相同的类作为创建多个对象的模板。第一步是定义类,然后成为对象创建的模板。

每个类都有一个名称,每个类都用于定义属性和行为。

下面通过一个简单的类来理解Java中类的定义:

public class Cat{
  String name;
  int age;
  String color;
  void sleeping(){
  }

  void eating(){
  }

  void barking(){
  }
}

Java创建对象有几种方式?

java中提供了以下四种创建对象的方式:

1. new创建新对象

2. 通过反射机制

3. 采用clone机制

4. 通过序列化机制

 

4 有没有可能两个不相等的对象有相同的hashcode

有可能.在产生hash冲突时,两个不相等的对象就会有相同的 hashcode .hash冲突产生时,一般有以

下几种方式来处理:

1. 拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以

用这个单向链表进行存储.

2. 开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入

3. 再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.

5 拷贝和浅拷贝的区别是什么?

浅拷贝:

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.

深拷贝:

被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.

6 面向对象都有哪些特性以及你对这些特性的理解

6.1 封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。

6.2 继承

好处:
1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了另一个特征,是多态的前提。
注意:
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第
一行都有默认的语句 super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过 super 语句指定要访
问的父类中的构造函数。
如果子类构造函数中用 this 来指定调用子类自己的构造函数,那么被调用的构造函数也一
样会访问父类中的构造函数。

6.3 多态

某一种事物有不同的具体的体现。
体现:父类引用或者接口的引用指向了自己的子类对象。
多态的好处:一般用于传递参数,传入父类,之后子类都可以传,提高了程序的扩展性。
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的
方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态的前提:
1:必须要有关系,比如继承、或者实现。
2:通常会有覆盖操作。
posted @ 2020-01-29 21:03  赵广陆  阅读(17)  评论(0编辑  收藏  举报