什么是面向对象呢?
面向对象对比面向过程是两种不同处理问题的角度。
面向过程更加注重步骤的顺序,从上到下按顺序分析,面向对象更加注重一类是事情的处理方式,好比生活中做饭,做菜,面向过程就是先洗米,洗锅,把放米进锅里,开火煮饭;做菜也是先洗菜,洗锅,把菜放进锅里;而面向对象将这些步骤封装在一个对象里面,比如我把洗X,洗Y,把X放Y煮封装在一个对象里面我只要是一类事情就可以调用这个对象给这个对象X,Y就行,它自动帮我们处理。
从以上的例子可知道面向比较直接高效,而面向对象更易于复用、扩展和维护,这也是面向对象的封装性。
面向对象优点
封装、继承和多肽
封装
我们在写代码的时候常用的Javabeen去写实例类,用getset去获取和设置对象的属性。防止该类的代码和数据被外部类定义的代码随机访问。
封装的优点
-
1. 良好的封装能够减少耦合。
-
2. 类内部的结构可以自由修改。
-
3. 可以对成员变量进行更精确的控制。
-
4. 隐藏信息,实现细节。
继承
继承基于类的方法,并做出自己的改变或扩展
子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化
注意:继承只能继承一个类
多肽
基于对象所属类的不同,外部对同一个方法的调用,实际执行逻辑不同。
多肽也是基于继承中的方法重写,父类的引用指向子类对象。
父类类型 变量名 = new 子类对象; 变量名.方法名();
无法调用子类特有的功能
public class Fu { int a = 0; private int b = 3; int c = 5; public void test(){ System.out.println("Futest"); } public void test1(){ System.out.println("Futest1"); } public void test3(){ System.out.println(a); System.out.println(b); } public void test4(){ System.out.println(c); } }
public class Zi extends Fu{ int a = 2; private int b = 4; public void test(){ System.out.println("Zi_test"); } public void test1(){ System.out.println("Zi_test1"); } public void test3(){ System.out.println(a); System.out.println(b); System.out.println(c); } public void test5(){ System.out.println("test5"); } }
public class Test { public static void main(String[] args) { Fu fu = new Fu(); Zi zi = new Zi(); Fu fu1 = new Zi(); System.out.println(fu1.a);//调用的是父类的变量(变量的编译看左边,运行看左边) zi.test4(); fu.test1(); fu1.test3(); //调用的时Zi类里面的test3(方法的编译看左边,运行看右边) fu1.test5(); //多态不能调用子类特有的方法,也就是没有重写的方法 } }