------- android培训、java培训、期待与您交流! ----------
面向对象
- 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。早期的计算机编程是基于面向过程的方法,比如C语言就是面向过程的。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。
- 面向对象是相对面向过程而言。面向过程和面向对象都是一种思想。
- 可以从比较面向过程和面向对象来对面向对象简单的认识:
- 面向过程:强调的是功能行为;
- 面向对象:将功能封装进对象,强调具备了功能的对象。
- 面向对象时基于面向过程的。
- 面向对象:执行者变指挥者。对象即实现各个功能的程序。如果对象没有,可以自己创造对象,以实现功能。
例如:人开门,名词提炼法。
人 { 开门(门) { 门.开(); } } 门 { 开(){操作门轴等} }
上面的模拟例题表示出了面向对象的优点,就是说一个人从执行者变成指挥者,这样可以提高工作效率,节省时间空间,能创造更多的价值。
- 面向对象三大特征:封装,继承,多态。
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处: 将变化隔离,便于使用,提高重用性,提高安全性。
原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。
通过一个例子来说明封装:该例子引用了private私有化来达到一个封装的作用。
class Person { private int age;//私有化。age私有化后,类以外及时建立了对象也不能直接访问,但是人应该有年龄,就需要在Person类中提供对应访问age的方式。 public void setAge(int a )//因此可以设置一个来对其进行访问 { if(a>0&&a<150) //控制条件必须写在方法中,来限定人的年龄范围。 { age=a; speak(); } else System.out.println("非法 age"); age=a; } public void getAge() { return age; } void speak() { System.out.println("age="+age); } } class PersonDemo { public static void main(String[] args) { Person p=new Person(); //p.age=20; p.setAge(20); p.speak(); } }
- 继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性行为,只要继承单独的那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。子类可以直接访问父类中的非私有的属性和行为,通过extends 关键字让类与类之间产生继承关系。
继承的特点:
Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
class SubDemo extends Demo{} //ok class SubDemo extends Demo1,Demo2...//error
Java支持多层继承(继承体系)
class A{} class B extends A{} class C extends B{}
定义继承需要注意:
不要仅为了获取其他类中某个功能而去继承
类与类之间要有所属( " is a " )关系,xx1是xx2的一种。
- 多态:
体现:
父类或者接口的引用指向或者接收自己的子类对象。
作用:
多态的存在提高了程序的扩展性和后期可维护性
前提:
需要存在继承或者实现关系要有覆盖操作
多态的存在提高了程序的扩展性和后期可维护性
前提:
需要存在继承或者实现关系要有覆盖操作
多态的特点:
成员函数:
编译时:要查看引用变量所属的类中是否有所调用的成员。
在运行时:要查看对象所属的类中是否有所调用的成员。 成员变量: 只看引用变量所属的类。
- 构造函数:
class person { private String name;//私有化名字 private int name; //私有化年龄 Person() //构造函数 { System.out.println("A:name="+name",,age="+age); } Person(String n)//构造函数 { name=n; System.out.println("B:name="+name",,age="+age); } Person(String n)//构造函数 { name=n; age=a; System.out.println("C:name="+name",,age="+age); } } class PersonDemo2 { public static vodi main(String[] args) { Person p1=new Person(); //对象1 Person p2=new Person("lisi"); //对象2 Person p3=new Person("wangwu",10);//对象3 } }
构造函数和一般函数的异同:运行:
构造函数对象已建立就运行,即给对象初始化。
一般函数对象调用了才执行,给对象添加对象具备的功能。
一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。
什么时候需要定义构造函数:当分析事物时,该事物存在具备一些特性或行为,那么将这些行为定义在鼓噪函数中。
构造代码块:作用,给对象进行初始化,对象一旦建立就运行,而且优先与构造函数执行。
和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数时给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。