java面向对象基础知识

面向对象和面向过程的区别

  • 面向过程把解决问题的过程拆成一个个方法,通过执行一个个方法来解决问题。
  • 面向对象则是先抽象出对象,然后用对象执行方法的方式解决问题;面向对象一般更易于维护、复用和扩展。

如果一个类没有声明构造方法,该程序能正确执行吗?

能正确执行。

构造方法是一种特殊的方法,主要作用是完成对象的初始化工作。

如果一个类没有声明构造方法,也可以执行!因为一个类在没有显式声明构造方法时,会有默认的不带参数的构造方法。但如果我们添加了类的构造方法时,无论是否有参,Java 就不会默认添加无参数的构造方法。

因此,在实际开发中,当我们重载了有参的构造方法,也要显式声明无参构造方法

构造方法有哪些特点?是否可被 override?

构造方法主要有三个特点:

  • 方法名与类名相同。
  • 没有返回值,但不能用 void 声明构造函数。
  • 生成类的对象时自动执行,无需调用。

构造方法不能被 override(重写),但是可以 overload(重载)因此可以在类中声明多个构造函数。

面向对象三大特征

封装,继承和多态

封装:封装是指把一个对象的状态信息(也就是类的属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但类可以提供一些被外界访问的方法来操作属性。比如setting和getting函数

继承:使用已存在的类的定义作为基础建立新的类,即子类继承父类的特征和行为,子类的定义可以增加新的属性或方法,也可以用父类的属性和方法,但不能选择性地继承父类。通过继承可以提高代码的重用和程序的可维护性。

多态:对于同一个行为,不同的子类对象具有不同的表现形式。

多态存在的三个条件:继承重写父类引用指向子类对象

接口和抽象类的共同点和区别

共同点:
  • 都不能被实例化。
  • 都可以包含抽象方法。
  • 都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。
区别:
抽象类接口
目的主要用于代码复用,强调的是所属关系对类的行为进行约束,实现了某个接口就具有了对应的行为,强调的是功能实现
继承一个类只能继承一个抽象类一个类可以实现多个接口
成员变量成员变量默认 default,可在子类中被重新定义,也可被重新赋值接口中的成员变量只能是 public static final 类型的,即常量型,不能被修改且必须有初始值
成员方法抽象类可以声明方法,也可以实现方法接口只能声明方法,不能实现方法(java 1.8中可以定义default方法体)

深拷贝和浅拷贝

浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象的内部对象是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。

实现了 Cloneable 接口,并重写了 clone() 方法,在clone()方法中调用父类Object的clone()方法

深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。

实现了 Cloneable 接口,并重写了 clone() 方法,在clone()方法中调用父类Object的clone()方法的同时对内部对象进行各自克隆

引用拷贝:用拷贝就是两个不同的引用指向同一个对象

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值