Hello 大家好,我又来啊,今天我们吧说Java的面向对象。
还记之前错过面试几家店铺的实习生职位,大部分面试官都问了自己有关面向对象
的题材,不理解以后还会见无会问,估计是免会见了咔嚓。。。(:3[▓▓]
oop.gif
下面我们吧正事!(≖ ‿ ≖)✧
面向对象三因素:封装、继承、多态
封装
:封装的含义,在于明确标识出允许外部使用的富有成员函数和数量项,或者被接口。继承
:- 连续基类的措施,并做出自己之扩充;
- 声明某个子类兼容于某某基类(或者说,接口及全配合于基类),外部调用者可随便需关注其距离(内部机制会自动将要派发
dispatch
顶当的逻辑)。
多态
:基于对象所属类的异,外部对同一个办法的调用,实际施行的逻辑不同。可怜醒目,多态实际上是以附于继承的第二栽意义的。
面向对象特点发生四独——封装、继承、多态、抽象
多态
计签名:方法名 + 参数列表(参数类型、个数、顺序)
重写
子类重写父类方法,除非实例方法可以给再写,重写后底办法要随为实例方法。分子变量和静态方法还无可知吃重新写,只能吃隐形。
重写实例方法:超类Parent中生实例方法A,子类child定义了同A
无异于签名和子集返回路
的实例方法B,子类对象ChildObj只能够调用自己之实例方法B。
方法的重写(override)两以及片多少一好口径:
主意名相同,参数类型相同
子类返回路小于等于父类方法返回路
子类抛来十分小于等于父类方法抛来很
子类访问权限大于等于父类方法访问权限
注意:
-
非克重写static静态方法。(形式达到足描绘,但精神上不是重写,属于下面要谈的藏匿)
-
重写方法可以转其它的艺术修饰符,如
final
,synchronized
,native
。不管受再写方法吃发生无final修饰的参数,重写方法还好长、保留、去丢这参数的
final 修饰符(参数修饰符不属方法签名)。
封装:
重载
于同一个好像中,有多独办法名相同,参数列表不同(参数个数不同,参数类型不同),与措施的回来值无关,与权力修饰符无关。编译器通过对法签名的辨别即可静态编译出不同之方式。这吗是java中重载与重写的区别之一。
重载只是一样种植语言特色,与多态无关,与面向对象也无关。多态是为实现接口重用。
Java中方法是足以同类名同名的,和构造方法唯一的分别就是是,构造方法没有返回值。
卷入的定义:方法的调用者并无知底方法的切实可行业务逻辑,只有方法的实现者才理解方法的现实贯彻。
隐藏
潜伏和覆盖在花样达到极其类似(语法规则),但装有本质的区分:只有成员变量(不管是不是静态)和静态方法可叫躲。
打包的知:Java将相关变量和办法封装到类似中,通过可见性实现封装。
成员变量
超类 Parent 中有成员变量 A ,子类 Child 定义了与 A 同名的分子变量 B
,子类对象 ChildObj 调用的是自己的成员变量 B。如果将子类对象 ChildObj
转换为超类对象 ParentObj ,ParentObj 调用的凡超类的成员变量 A !
-
隐蔽成员变量时,只要同名即可,可以重新改变量类型(无论基本类型或者隐藏类型)
-
免可知隐藏超类中的 private
成员变量,换句话说,只能隐藏可以拜的分子变量。 -
隐藏超类成员变量 A
时,可以下降或加强子类成员变量B的拜访权限,只要A不是 private。 -
潜伏成员变量和是否静态无关!静态变量可以藏实例变量,实例变量也可隐藏静态变量。
-
足隐蔽超类中之final成员变量。
可见性有四单重要字:
静态方法
超类 Parent 有静态方法 A ,子类 Child 定义了跟 A
一如既往签名以及子集返回路 的静态方法 B ,子类对象 ChildObj
调用的是协调之静态方法 B 。如果把子类对象 ChildObj 转换为超类对象
ParentObj ,ParentObj 调用的是超类的静态方法 A !
躲藏后底法子要依为静态方法
1.**private**:当前接近可见
2.protected:当前类&本包可见
3.default:(默认)当前类&本包&外包子类可见
4.private:都可见
class的可见性要么是public,要么是本包可见
貌似景象下还是方公有化(public)属性私有化(private)
继承:
累的概念:子类可以延续父类所有属性和措施,但是由可见性的原委,子类只能使用具有父类的非私有化属性和方式(构造器除外)。
※要专注继承是单独为的,不得以并行继承
多态:
多态就是还写及重载了,区别就是重载和参数有关,重写及目标有关
重载方法可生出在个别独八九不离十吃,也得以起在一个类似中,方法名相同,参数类型不同,与归值无关。
双重写得有在少个近乎吃,方法名相同,参数类型一致,方法返回路一致,返回路一致。
1 //方法test体现重载 方法testTest体现重写
2 public class A {
3 public void test(int a){
4 return "a";
5 }
6
7 public void test(long a){
8 return "aa";
9 }
10
11 public void testTest(int b){
12 return "b";
13 }
14 }
15
16 public class B extends A{
17 public void testTest(int b){
18 return "bbbbbb";
19 }
20 }
抽象:
泛泛的概念包括接口和抽象类。
public interface A{}
接口特点:不可知实例化对象
只有常量
** 但来抽象方法,没有常见方法**
一定让实现
接口是异样之抽象类
悄悄告诉您(`・ω・´)
:一个好像可实现多独接口 || 抽象类可兑现接口 || 接口可以连续接口
|| 不克兑现接口)
public abstract class A{}
泛泛类特性:不能够实例化对象
有构造器(有成员变量,需要初始化化)
可以来常量&变量
可以出常见方法&抽象方法
一定叫连续,实现即得还写抽象方法
抽象类的长:可以给反复♂利用。
空洞方法自然在空虚类吃,抽象类中无肯定有抽象方法。
好了! 以上就是是目前自己在Java面向对象方面的细见解了!希望能帮助到大家!
我们下期再见!