构造函数
Java构造函数的名称必须和类名一样,且没有返回值,可以是public或private
Java有构造函数,没有析构函数,构造函数是制造对象的过程,析构函数是清除对象的过程
new对象相当于开辟内存空间,析构函数就相当于清除掉开辟的内存空间
每个变量都是有生命周期的,出了生命周期它就死了,它只能存储在离它最近的一对{}中
变量被创建,变量占据内存位置,变量消亡时,系统将回收内存,变量死不能复生,阿弥陀佛
变量创建通过构造函数,回收通过析构函数,但是Java没有析构函数,Why?,因为Java提供了内存自动回收机制,当变量退出生命周期以后,JVM会自动回收所分配对象的内存,所以不需要析构函数来释放内存
对象回收效率依赖于垃圾回收器 GC,其回收算法关系到性能的好坏,是JVM的研究重点
每个Java类都必须有构造函数,否则对象无法创建
如果我们没有主动去定义构造函数,那么Java编译器会自动为该类产生一个空的无参的构造函数,可以有多个构造函数,只要他们的形参列表不相同即可,在new对象时,根据实参的不同,自动匹配相应的构造函数,如果实参形参匹配不上,就会报错
信息隐藏及this关键字
面向对象有一个原则:信息隐藏
类的成员属性,私有 private
类的方法是共有的, public
外界对类成员的操作,只能通过 get/set 方法,在 idea中的快捷键是 Alt +Insert
信息隐藏原则
保护属性信息
公开行为信息
类似函数黑盒,你就拿去用就对了,你不用知道函数里有什么参数,发生了什么,你只需要知道输入参数,就会给你输出,这样安全性就大大提高了
this 负责指向本类中的成员
this 可以代替本类中的构造函数
继承
面向对象最突出的特点就是继承,封装,多态
变量类型的继承
输出 你好
对比面向过程,面向过程里没有继承,会出现重复定义
物以类聚,万物皆对象,对象也可以分成若干类
类内的属性和方法都具有一定的共同点,将这些共同点提取再抽象,就叫做 父类/超类/基类,其他类就是这个类的子类或叫派生类
public class demo12 { /* public class Man{ int height; int weight; public void eat(){}; public void plough(){};//耕田 } public class Woman{ int height; int weight; public void eat(){}; public void weave(){};//织布 }*/ //提取整合 共同点 作为父类 public class Hunam{ int height; int weight; public void eat(){}; } //继承,只需要单独加一个耕田方法即可 public class Man extends Hunam{ public void plough(){};//耕田 } //继承,女人,继承了人的身高体重等属性,还有吃的方法,单独不一样的是织布 public class Woman extends Hunam{ public void weave(){};//织布 } }
从多个类(对象)中提取共性,形成了父类,再提取,相对父类,一直这样套娃,其他类继承父类,成为子类,也拥有这些特性
子类继承父类所有的属性和方法(但不能直接访问private成员)
信息隐藏原则:方法都是public的,所以子类会继承父类的所有方法,可以直接使用
在同名属性和方法时,本类要比父类的优先级高
单根继承原则:每个类只能继承一个类,C++支持一个类继承多个类
如果不写 extends Java默认继承 object类
Java所有的类都是从 java.lang.object开始,构建成一个关系继承树
每个Java类都必须有构造函数
没有显示定义构造函数,编译器就会自动为该类产生一个空的无参构造函数,如果有了显示的有参构造函数,编译器就不要帮你加了
每个子类的构造函数的第一句话,都默认调用父类的无参构造函数 super() ,除非子类构造函数第一句话不是 super , super 语句必须在第一行, super 语句只能出现一次