(六)java面向对象
1. 万事万物皆对象,事物抽象成对象。Object-Oriented Programming
面向对象编程思想实际上就是一种运用对象、类、 继承、封装、聚合、关联、消息、多态性等概念来 构造系统的软件开发方法
1.1 实例化对象的创建
内存的分配,栈内存中保存基本数据类型的局部变量和对象的引用值。
堆内存的分配,只能使用new来分配内存空间,通常保存一些数据需求大的变量。
在我们实例化对象时,会同时分配栈和堆内存,在栈内保存对象的首地址,即 引用;在堆内存中保存了对象的属性,但是对象名都是存在栈内存中的。
2. 类的继承extends
①java中只支持单重继承,没有多重继承。但一个父类可以有多个子类。
②实例化,先实例化父类,再子类。先调用父类构造方法,在调用子类构造。
继承中,子类只能继承 父类中被public protected 修饰的属性或者方法。子类继承父类时,super关键词一定得要在第一行!
2.1 为什么要用继承?
①使编码更为高效
②易于维护
③代码重用
3. 封装概念
使用访问权限修饰符对类的成员进行控制,被成为封装。
隐藏属性、方法或实现细节的过程称为封装
3.1 为什么要用封装?
①隐藏类的实现细节
②方便控制用户的不合理操作
③便于修改,增强代码的可维护性
4. 修饰符问题
构造器和类的权限通常为public;private权限最小,限制类外访问,一 般把属性设为private,让其他类不能直接访问属性,达到保护属性的目的;friendly是默认权限,即不使用权限修饰符时,即为friendly,该权限声明的成员在类内以及在同一个包中的其他类可以访问;而 protected所修饰的成员在类内、同一个包中、所在类的子类中都可以 访问。
即public > protected > friendly > private
private只能在本类中使用。
defalut只能在本类或者同一包下的类中使用。
protect不同包的子类也能使用。
public 都可以用。
5. 方法的覆盖和重载区别
方法覆盖的规则:(相同的方法名,返回类型,参数列表)完全相同。
方法的覆盖只在子类继承父类的时候才会有。
覆盖的目的:需要重写父类的方法.
方法重载的规则:只要函数名称相同即可。(参数列表不同)
方法重载可以存在在每一个类中。
返回类型的不同 不是 判断函数重载的条件。
eg. public int add(int a ,int b ){}
public void add(int a, int b){}这2个是函数的重载吗???
错误,直接报错Duplicate method add(int) in type test01。
6. super关键词的用法!
①调用父类的构造方法,且必须放在第一行。super()中的参数决定了调用父类的那个构造方法。
this()调用本类的构造方法,必须放在第一行。与super()二者只能纯在一个。
②super可用于访问父类被子类隐藏或着覆盖的方法和属性,使用形式为super.方法(属性)