Java教程

Java基础面试题第六、七、八天(面向对象基础)

本文主要是介绍Java基础面试题第六、七、八天(面向对象基础),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

java面向对象的特征

  1、封装
  2、继承
  3、多态

面向对象和面向过程的关系

面向过程是面向对象的基础, 面向对象基于面向过程实现的, 但是代码思想层面上, 面向对象时更高级的设计思想

类与对象的关系

- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。

成员变量的默认值

		数据类型                             默认值
基本类型:整数(byte,short,int,long)           0
        浮点数(float,double) 				 0.0
        字符(char)					    '\u0000'
        布尔(boolean)						 false
引用类型: 数组、类、接口...  					 null

成员变量和局部变量的区别

1.定义位置不同
成员变量: 类中方法外
局部变量:方法中

2.内存位置不同
成员变量:堆空间
局部变量:栈空间

3.生命周期不同
成员变量:随着类对象的创建而创建,随着对象的消失而消失
局部变量:随着所在方法的执行而创建,随着方法的执行完毕而消失

4.默认值不同
成员变量:有默认值
局部变量:没有默认值
变量定义的注意事项 : 定义在方法中变量, 如果没有赋值, 不能使用

6.this和super关键字

this表示本类当前对象的引用
super表示本类当前对象父类的引用实际代码中this和super的使用:

1.this : 当前类型对象的使用
   可以区分成员变量与局部变量的重名问题, 带有this关键字的变量表示成员变量的使用
2.super : 当前类型对象的父类引用
1)子父类定义重名成员变量, super.成员变量表示父类成员的使用
2)子父类定义重名成员方法(子类重写), super.方法() 父类中的方法功能
3)子类构造方法第一行, 一定要调用父类构造, 为了保证父类成员优先于子类进入到内存中   super(父类构造实际参数);
当成员变量和局部变量重名, 带有this关键字的变量表示成员变量的使用,带super表示父类的变量

构造方法的特点

1)方法名必须和类名一致
2)不需要返回值
3)默认被jvm调用使用, 构造方法调用时机:
     在创建对象同时, 被JVM虚拟机主动调用,并且创建一次对象, 构造方法只调用一次, 因为构造方法无法手动通过对象名调用
4).super() : 父类构造调用. 必须写在构造方法第一位置上, 直接保证父类构造优先于子类进入内存运行

标准实体类

1.私有的属性
2.公有的getter/setter方法
3.空参构造
4.实现序列化接口

静态方法中可以存在this关键字吗?

答:不可以,因为this属于对象

静态成员变量和非静态成员变量的区别

1.概念上,所属不同:
	非静态变量属于对象
	静态变量属于类,类变量
2.内存空间不同,存储位置不同  
	非静态变量属于对象,所以存储在堆内存中
	静态变量属于类,存储在方法区的静态区中
3.内存时间不同,生命周期不同
	非静态变量属于对象,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失
	静态变量属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失(内存管理)而消失
4.访问方式不同
	非静态变量只能使用对象名访问
	静态变量既可以使用对象访问,也可以通过类名访问:
	类名.静态变量名  或者 对象名.静态变量
	类名.静态方法名()

高内聚、低耦合是什么意思

1.高内聚 : 类中功能进行尽量多
2.低耦合 : 少与外类发生密切关联

为什么子类无法继承父类的构造方法

原因:
 	 	父类的构造方法需要和父类的类名一致、子类的构造方法需要和子类类名一致,父	类和子类的类名不一样。因此无法继承,名称有冲突。
 	    父类的构造方法用于给父类的成员变量赋值,子类的构造方法用于给子类的成员变	量赋值,子类的成员变量较多,使用父类的构造方法无法将子类中所有的成员变量都进行赋值,因此不继承父类的构造方法
解决:
 	子类不继承父类的构造,但是可以【调用】父类的构造方法。

java支持单继承,不支持多继承,java支持多层继承

单继承:一个子类只能继承一个父类(一个孩子只能有一个亲爹)
不能多继承:一个子类不能同时继承多个父类
可以多层继承:A类可以继承B类,B类可以继承C类,A类中拥有B、C类中的所有属性和方法。

代码块分类

	局部代码块 限定变量的生命周期
 	构造代码块 由jvm调用在构造方法之前
 	静态代码块 属于类,只执行一次
 	同步代码块(多线程)

抽象类和抽象方法的关系

抽象方法所在的类必须是抽象类
抽象类中未必一定都定义抽象方法,抽象类中未必存在抽象方法

抽象类有构造方法吗?

有
虽然本类无法创建对象,但是抽象类一定有子类,子类会访问父类的抽象方法。
是否有构造方法,不取决于是否可以创建对象,而是取决于是否可以定义成员变量。如果可以定义成员变量,那么就需要初始化成员变量,就是构造方法来完成的。

接口中只能是抽象方法吗?

在jdk1.8以前是的,
在jdk1.8以后,接口中可以定义添加默认方法、静态方法

接口中是否可以定义出构造方法?

不可以,原因 : 因为接口中不能定义出成员变量, 只有可以定义成员变量的类型, 才能够定义出构造方法

类与类、类与接口、接口与接口之间的关系

1、类与类
 	继承的关系,使用extends关键字
 	可以单继承、不可以多继承、可以多层继承
2、类与接口:
 	实现关系,使用implements关键字
	java中有单实现和多实现

3、接口与接口:
 	继承关系,使用extends
 	可以单继承、也可以多继承、可以多层继承
 	多继承的格式: 	
 

创建一个成员内部类对象

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象; 

权限修饰符从小到大权限罗列

 private :私有的     限定范围是:本类中使用, 通常修饰成员变量
 默认的 :啥也不写    限定范围: 本类和本包(package)中使用
 protected :受保护的  限定范围: 本类和本包中使用,其他包的子类
 public :公共的   限定范围:没有范围, 通常修饰类和方法

成员变量初始化顺序

默认初始化--》显示初始化---》构造初始化

代码块

静态代码块:属于类,只执行一次,最先执行
构造代码块:类中方法外,每次都在构造方法之前执行
这篇关于Java基础面试题第六、七、八天(面向对象基础)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!