码迷,mamicode.com
首页 > 编程语言 > 详细

Java面向对象

时间:2021-02-08 12:23:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:定义静态方法   nat   默认方法   开箱   直接   维护   地方法   round   如何   

什么是面向对象,什么是面向过程,二者的优缺点?

概念:

面向过程就是分析出实现需求所需要的步骤,然后通过一些方法一步一步实现这些步骤。面向过程强调的是功能行为。

面向对象就是把整个需求中,存在共性的部分进行封装成类,然后进行实例化。它强调的是具备了功能的对象。

举例说明:

举个例子,比如说买电脑。

面向过程就是自己买,我需要电脑、然后查询参数信息、横向比较机型、了解折扣信息、与商家讨价还价、下单、收快递、开箱验货、确认收货。

面向对象就是找人买。我需要电脑,然后找女朋友帮我买、收电脑。

面向过程的优缺点:

优点:因为面向对象会把所有的事务看成是对象。所以面向过程性能上优于面向对象。

缺点:不易维护、复用、拓展。

面向对象的优缺点:

优点:易维护、复用、拓展、低耦合、系统更加灵活。

缺点:性能比面向过程低、开销大。

什么是类、对象、二者之间的关系?

类和对象是面向对象方法的核心概念。

类是对一类事物的描述,是抽象的、概念上的定义。

对象是实际存在的该类事物的每个个体,是类的实例。

类不占内存,对象才占内存。

举个例子来说明二者的关系。

如果汽车的设计图纸是类,那么对象就是根据该图纸创造出来的一辆辆汽车。

什么是对象的三大特征?

对象的三大特征是:封装、继承、多态。

封装:

把不想让别人看到的细节和内部功能的具体实现隐藏起来,只保留和外部交流数据的接口。

举个例子:电视机用一个外壳把内部零件及控制电路封装起来,只提供按钮或者遥控器接口供人使用。

如何使用:一般是将属性私有化(private),或者提供对应的get和set方法。

继承:

在一个已有类的基础上派生出新类。其最大的好处就是实现了代码的高效重用,也更加形象的描述现实世界中对象的关系。但是耦合度提高了。

举个例子:动物类,可以派生出狗类、猫类、和兔类等众多具体的动物。

继承的特点:

  1. 子类继承父类以后,父类声明的属性和行为子类都可以获取
  2. 子类除了通过继承获取了父类的属性和方法外,还可以自己定义独有的属性和方法 师父》徒弟
  3. 子类的功能永远比父类多
  4. java是单继承的,一个子类只能继承一个父类,一个父类可以有多个子类

 

多态:

概念:

同一个动作作用不同的对象产生不同的具体行为。多态就是一个对象的多种形态。

举个例子:人“吃饭”这个事情,人都是要吃饭的,但不同的人吃饭时用的工具是不同的,比如东方就喜欢用筷子,而西方则喜欢用刀叉。

体现方式:
  1. 基于继承的实现,不同的子类重写了父类方法以后体现不同的形式。
  2. 接口的实现
多态的条件:
  • 继承:子类去继承父类  例如: Dog extends Pet
  • 重写:子类重写父类的方法
  • 重载:同一个方法名,根据形参不同,实现的功能也不同
  • 子类对象的多态性:父类的引用指向子类

 

多态的类型

(1)编译时多态:方法的重载(在编译期间,调用相同的方法名根据不同的参数列表来确定调用的是那个方法

(2)运行时多态:方法的重写(只有在运行期间才能确定使用的对象类型,才能确定变量的引用指向那个实例)

 

四种访问修饰符的区别?

访问权限 同类 同包 子类 不同包
public  √  √  √  √
protected √   √  √  
default  √  √    
private  √      

 

成员变量和局部变量的异同? 

相同点:

1.遵循变量声明的格式:数据类型   变量名   =  初始化值

2.都有作用域

不同点:

1.声明的位置不同:

成员变量:声明在类里,方法外。    

局部变量:声明在方法内,方法的形参部分、代码块内。

2.修饰符数量不同:

成员变量的修饰符有四个:public  private  protected  缺省(default)

局部变量没有修饰符,与所在的方法修饰符相同

3.初始化值:

成员变量:一定会有初始化值。如果在声明时,不显式的赋值,那么不同数据类型会有不同的默认初始化值。

byte  short   int   long   ==>0

float  double  ==>  0.0

char ==>  空格

boolean  ==> false

引用类型变量  ==>null

局部变量:一定要显式的赋值。(局部变量没有默认初始化值)

4.内存存放的位置不同:

成员变量存在于堆空间中,局部变量存在于占空间中。

5.作用域不同:

成员变量作用在类的内部,局部变量作用在方法的内部。

 方法重载(overload)和方法重写(override)的区别?

  1. 方法重载要求方法名相同、形参列表必须不同(参数个数、类型、类型的顺序)和返回值无关
  2. 方法重写要求方法名、形参列表、返回值类型必须和父类一致,访问修饰符不能小于父类的
  3. 方法重载必须在同一个类里面进行重载
  4. 方法重写必须存在继承关系,发生在子类和父类之间

Java类中的构造方法的那些事

构造方法,也叫构造器,构造方法最最大的作用就是创建对象,就我们new的时候就是调用了构造方法。

构造方法的作用:无参构造方法就是创建对象,有参构造方法就是在创建对象的同时给属性赋值。

注意点:

  1. 构造方法不能定义返回值,在java类中至少有一个构造方法
  2. 构造方法必须和类的名字一致,大小写也得一致
  3. 如果在定义一个类时候,没有去定义构造方法,系统默认会提供一个无参的构造方法
  4. 如果定义了构造方法,系统将不会再提供无参构造方法
  5. 如果自己定义了有参构造方法,一定要加上无参构造方法

Java类中参数的那些事

参数分为两种:

形参:在方法定义的时候实际定义的参数,写在方法小括号里面的参数

实参:在调用方法的时候,实际传入到方法里面的数据

参数传递的过程中,有两项规则
1.对于基本数据类型来说,形参的操作不会影响实参
2.对于引用数据类型来说,形参的操作会影响实参,因为传入的是堆里面的地址,形参和实参指向的是同一块地址值

Java程序内存中的那些事

 运行一段程序,申请电脑内存,内存都是归jvm进行管理的。

内存会分为五部分

1.栈(Stack):主要就是存放局部变量

2.堆(Heap):new出来的东西都在堆里,在堆里的变量都是成员变量,都会有默认值。

3.方法区(Method Area):存放class文件

4.本地方法区(Native Method Area):与操作系统有关

5.寄存器(PC Register):与cpu有关

super关键字和this关键字的区别?

super关键字可以修饰属性、方法、构造方法
1.当子类和父类的属性名同名时,默认会使用子类的属性,我可以通过"super.属性名"调用父类的属性
2.子类重写父类方法后,如果子类想再次调用父类重写前的方法,可以super.方法名   调用父类重写前的方法
3.super修饰构造方法,通过在子类构造方法中使用"super(形参)"来显示的调用父类的构造方法

注意点:

super()必须放在构造方法的首行
在构造方法内部"this(形参)"或"super(形参)"只能出现一个
在构造方法中,如果不显示的使用"super(形参)"的方式调用父类对应的构造方法,默认会调用父类的构造方法,只是给你隐藏掉了

Final关键字和static关键字

final关键字代表最终的意思,可以修饰类、方法、成员变量、局部变量

修饰类,代表这个类是一个最终类,这个类不能被继承,但是可以继承别的类

修饰方法,就是一个最终方法,这个方法不能被重写

修饰成员变量,成员变量的值不可改变。成员变量不会再有默认值,如果加了final关键字,需要对成员变量直接赋值。

修饰局部变量,局部变量就变成了一个常量,一旦赋值不可改变。

static关键字代表静态的意思,可以修饰属性、方法、代码块。

static修饰变量:

按照是否使用static进行修饰,可以分为:实例变量(就创建了实例以后才可以使用)和静态变量
1. 实例变量:我们创建了多个对象,每个对象都独立有一套类中非静态变量。当修改了其中一个对象的非静态变量时,不会导致其他对象同样的属性值的修改
2. 静态变量:我们创建了多个对象,多个对象共享同一个静态变量,当其中一个对象对静态变量进行了更改,会导致其他对象同样的属性值的更改
static修饰属性:
(1)这个属性就不在属于对象了,而属于类本身,只要通过这个类创建的对象,都可以共享该静态变量,实例变量属于对象的
(2)静态变量是随着类的加载而加载,实例变量随着对象的创建而加载
(3)静态变量的加载时机早于对象的创建
(4)由于类只会加载一次,静态变量在内存中也只有一份
static修饰方法:
(1) 这个方法就不在属于对象了,而属于类本身。
(2) 静态方法是随着类的加载而加载,"类名.方法名"的方式调用
(3) 静态方法中只能调用静态变量和静态方法,非静态方法可以调用静态方法和静态变量,也可以调用非静态变量和非静态方法
(4) 在静态方法里面不可以使用this和super关键字,因为这个两个关键字是有了对象以后才存在,静态方法早于对象的创建
开发中,如何确定一个属性使用static进行修饰呢?
如果一个属性需要被多个对象共享,使用static进行修饰。
开发中,如何确定一个方法使用static进行修饰呢?
工具类会使用static进行修饰方法。比如jdbc工具类,collection连接对象。操作静态变量的方法,一般使用static进行修饰

抽象类、抽象方法的那些事?

1.抽象方法使用abstract修饰,例如:public abstract void eat()

2.抽象方法只有方法的定义,没有方法的实现。

3.抽象类就是在class前面加上abstract,例如:public  abstract   class   Person {}

4.抽象类的特点:

  4.1 抽象方法所在的类必须是抽象类

  4.2 抽象类不能实例化

  4.3 如果要实现抽象类,必须创建一个子类去继承抽象类

  4.4 子类继承一个抽象类,必须重写抽象类中所有的抽象方法(子类也是抽象类除外)

  4.5 抽象类里面可以定义普通方法

  4.6抽象类里面可以定义构造方法

接口和实现类的那些事?

接口是什么?

1.接口就是多个类之间的公共规范

2.接口的出现就是为了解决java单继承的问题,java不支持多继承

3.接口里面的方法都是抽象方法,它相当于一个特殊的抽象类

4.定义接口用  public   interface  接口名{  }

接口的特点:

1.接口里面成员变量都是常量,默认会加上“public  static   final  ”进行修饰,不写也会默认加上

2.接口里面的方法都是抽象方法(默认方法除外),默认会加上“public abstract”进行修饰

3.接口不能实例化,抽象类通过继承实现,接口通过创建一个类去实现这个接口

4.接口里面不能定义普通方法,可以定义默认方法(jdk1.8开始,主要是为了接口升级)

5.接口里面没有构造方法

6.一个接口可以继承接口,并且可以继承多个接口

实现类:

 

1.实现接口的类叫做实现类,类名 implements 接口名
2.实现要重写接口里面所有的抽象方法(实现类是抽象类除外)
3.一个实现类可以实现多个接口,每个接口之间用","号隔开
4.如果一个类在继承一个类的同时实现一个接口,那么继承要放到接口实现的前面。类名 extends 父类 implements 接口名

接口和抽象类的相同点和不同点?

 

 

相同点:

(1)接口和抽象类都不能被实例化。只能被其他类实现和继承。
(2)接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这些抽象方法,否则实现的类就是抽象类。
(3)接口里可以定义静态方法;抽象类可以定义静态方法

不同点:

(1)抽象类与接口定义不同:抽象类abstract class ,接口 interface

(2)接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。

(3)接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量

(4)接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。

(5)接口不包含初始化块,但抽象类可以包含初始化块

(6)一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java的单继承不足

 

Java面向对象

标签:定义静态方法   nat   默认方法   开箱   直接   维护   地方法   round   如何   

原文地址:https://www.cnblogs.com/Blcjme/p/14384812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!