面向对象的基本特征

面向对象的基本特征

抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,

Java的基本数据类型都有什么?String是基本数据类型吗?

基本数据类型包括int、short、byte、double、boolean、char、long、float

String不是基本数据类型,是引用数据类型。

基本数据类型和引用数据类型有什么区别?

基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;

引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。

int 和  Integer有什么区别?

int是java的基本数据类型之一,而Integer是java为int提供的封装类,它是引用类型

int类型作为成员变量时的默认值为0,而Integer为null

内存分配的位置不同

final可以修饰什么,不可以修饰什么?为什么?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。

内部类要访问局部变量,局部变量必须定义成final类型

Final 不能修饰抽象方法,抽象类和接口,因为这些都是为了给其他类扩展和实现的,用final修饰这些就不能被扩展了

重载和重写有什么区别?

重载 overloading

重载是指在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数个数或者参数类型却不相同。

重写overriding

重写是对父类的方法内容的重新定义,要求方法名和参数都相同,和父类方法写的一模一样也没关系。在实现接口时必须重写接口中的方法;抽象类中含有抽象方法时,继承的类必须重写其抽象方法。

类与类之间关系:

继承,实现,依赖,关联,聚合,组合

对象

对象是客观存在的具体实体,具有明确定义的状态和行为。(万物皆对象)

类是具有相同属性和行为的一组对象的集合

属性

在类中表示对象或实体拥有的特性时称为属性 

方法

对象执行的操作称为方法。

类与对象的关系

类是具有相同属性和行为的一组对象的集合

类是概念模型,定义对象的所有特性和所需的操作

对象是实际的实体,对象是真实的模型,所有属于同一个类的对象都具有相同的特性和操作

类是由对象抽象而来,对象是类的实例化

封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式

继承的特点

Java使用的是单一继承

继承的双方必须满足 is-a 关系

具有层次结构

子类继承了父类的属性和方法

继承的优点

代码的可重用性

父类的属性和方法可用于子类

可以轻松地自定义子类

设计应用程序变得更加简单

方法重写

子类对父类中已经定义的方法进行重新实现叫方法重写

当子类发现父类的方法实现不能满足需要的时候,可以对这个方法进行重写

方法重写的要求:两同两小一大

方法名称、参数列表相同

返回值类型、异常抛出类型小 <=

访问修饰符的可见性要比父类的方法要大 >=

构造器调用顺序

构造器不能被继承

    

子类构造过程必须先调用父类的构造器

要调用父类构造器,使用关键字 super

即使我们没有显示的去调用父类的构造器,系统也会默认在子类构造器的第一行自动调用父类的一个空参数的构造器。

关键字 super

调用父类构造器的语法为:

super()  或 super(参数列表) ;

super () 方法始终指向调用类的父类构造器

子类调用父类的构造器是,必须在子类构造器的第一行代码调用。

super.方法()  可以在子类中调用父类的构造器以外的其他方法。

Object类

Java.lang.Object类是所有类的父类。

如果一个类的声明没有明确地指出继承哪个类,则编译器默认地认为该类继承自Object

Object类的常用方法  toString()方法

toString方法将一个对象转换为String。

如果我们需要输出各种有用的信息就必须覆盖toString方法。

当发生自动的字符串转换时,编译器会调用这个方法。

例如System.out.println()调用:

Employee emp = new Employee();

System.out.println(emp);

等同于

Employee emp = new Employee();

System.out.println(emp.toString());

多态

多态性是指“多种形式”

它使用不同的实例而执行不同操作

造型和虚方法调用

这个是多态的一个应用,将父类的引用指向子类的对象。语法应该是定义一个父类的引用,然后创建一个子类的对象,然后将父类的引用指向新创建的子类对象。

在多态的情况下,声明为父类类型的引用变量只能调用父类中的方法,而子类对象中覆盖了父类的方法,这时父类对象调用的是子类中的方法,这种机制就是虚方法调用。

instanceof运算符

需要确切知道到底构建的是什么对象可以使用instanceof运算符。

包装类

Java不将基本数据类型视作对象,也就是说基本数据类型不会被视为对象处理,它只是一个值,但是有些时候我们需要使用对象操作,所以就要使用到Java的包装类,包装类与基本类型一一对应。

装箱和拆箱

基本数据类型转换成引用数据类型的过程称为装箱

从引用类型数据转换成基本数据类型的过程称为拆箱

这种功能很有用,您可能会经常遇到基本类型数据和引用类型数据的互相转换。

枚举

枚举是用一组有限的符号名称来表示一些属性值,例如一年就四个季节,我们只要定义四个常量就行了。

Java SE 5.0开始,定义枚举类使用关键字enum,其基本语法如下面一个例子所示:

public enum Season{

SPRING, SUMMER, FALL, WINTER

}

static 修饰符

static修饰符修饰的方法叫静态方法

使该方法独立于类的实例,可以直接使用类名去访问,而不仅仅是类实例,所以也叫类方法

static修饰符修饰的属性叫静态属性

使该属性独立于类的实例,可以直接使用类名去访问,而不是类实例,所以也叫类属性

static修饰符修饰的代码块叫静态代码块

使该代码块独立于类的实例,可以先于类的加载而加载

静态导入

从JavaSE 5.0开始,import语句不仅可以导入类,还可以导入静态方法和静态属性

import  static  java.lang.Math.PI;

public class StaticImport {

public static void main(String[] args) {

System.out.println(PI);

}

}

final 修饰符

修饰变量,变量不能修改

修饰方法,子类不能重写方法

修饰类,不能有子类

abstract 修饰符

由abstract修饰的方法叫抽象方法

抽象方法必须声明在抽象类中

抽象方法语法:

abstract   type method_name(parameter_list);

由abstract修饰的类叫抽象类

声明抽象类语法:

    abstract class{…… }

父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节。

Abstract 修饰符规则

抽象类不能被实例化

抽象类的非抽象子类必须实现父类的所有抽象方法

构造器和static方法不能是抽象的

子类中实现的抽象方法的访问范围必须大于或等于父类的访问范围

接口

接口就是某个事物对外提供的一些功能的申明 

可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点

使用interface关键字定义接口

      接口中的方法只能是声明,不能是具体的实现,也就是所接口中的方法只能是抽象方法。

接口中的变量只能是 static 和final修饰的常量。

实现接口

使用关键字 implements 实现接口,

如:class demo implements myinterface

如果有一个以上接口被实现,则用逗号隔开接口名称。

如: class demo implements Mycalc, Mycount{….}

如果一个非抽象类实现了接口,那么它必须实现该接口中的所有方法

接口继承

接口是可以多重继承的,一个接口可以继承多个接口使用exetends关键字表示继承,多个接口之间使用逗号“,”隔开。

接口和抽象类的区别

从编程的角度来看,两者相同的地方是都不能被实例化,都包含抽象方法。

接口主要描述类有什么功能,是一组对类的需求描述;而抽象类主要是讲这个类究竟是个什么东西,本质上还是一个类。

一个接口继承自多个接口,同一个类可以实现多个接口;然而抽象类毕竟是一个类,一个类只能单继承一个类,如果这个类继承了一个抽象类,它将不能继承其他类。

接口只能包含抽象方法,并且这些方法都是public 的,接口只能包含常量并且这些成员都是public的,接口不能包含其他成员例如构造器;

抽象类除了定义抽象方法以外,还可以在抽象类内定义属性、构造器和普通方法(有方法体和具体实现逻辑的方法)。

1. 方法重载和重写的异同点是什么?

在同一个类中有多个方法名称相同,参数列表不同,称为方法重载

在继承时,子类可以对父类的方法进行重写,被重写的方法要求方法名和参数列表完全相同,返回值和声明抛出的异常类型应该能自动转换为父类方法中对应的类型,访问修饰符访问范围不能比父类方法小

2. ==和 equals 的区别是什么?

==用于比较两个变量中存储存储值是否相等

Equals用于比较两个对象的的内容是否相等

3. java 程序在什么情况下调用 toString 方法?

要获取对象信息时可以调用toString()方法

4. 简述面向对象的特性?

面向对象的特征有:

封装:隐藏属性和方法实现的细节,公开接口。Java通过类、包、访问修饰符实现封装

继承:通过继承,子类可以直接使用父类中声明的非私有的方法和属性,便于类的设计

多态:父类的引用可以指向子类的对象,但当调用方法时如果这个方法被子类重写过,会调用子类的实现

5. int 和 Integer 的区别?

Int是基本类型

Integer是引用类型,它是int的包装类型,里面包装一个int类型的值,可以提供方法

6.  访问修饰符的作用域是什么?

private:当前类

default:当前类、当前包

protected:当前类、当前包、子类

7.  深复制和浅复制分别是什么?

在对象克隆时,对于引用类型属性,只是值复制,则是浅复制,若是也对引用对象进行复制,则是深复制

8. java 中是否有引用传递?为什么?

没有,java在方法调用时,只是将实参的值赋值给形参。

猜你喜欢

转载自blog.csdn.net/weixin_42786143/article/details/81254118