------- android培训、java培训、期待与您交流! ----------
面向对象:
特点:1:将复杂的事情简单化。2:面向对象将以前的过程中的执行者,变成了指挥者。
3:面向对象这种思想是符合现在人们思考习惯的一种思想。
封装(面向对象特征之一):
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
this:代表对象。就是所在函数所属对象的引用。
this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。
开发时,什么时候使用this呢?
在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用this来表示这个对象。
this 还可以用于构造函数间的调用。
调用格式:this(实际参数);
this对象后面跟上 . 调用的是成员属性和成员方法(一般方法);
this对象后面跟上 () 调用的是本类中的对应参数的构造函数。
注意:用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。否则编译失败。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
this:代表对象。就是所在函数所属对象的引用。
this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。
开发时,什么时候使用this呢?
在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用this来表示这个对象。
this 还可以用于构造函数间的调用。
调用格式:this(实际参数);
this对象后面跟上 . 调用的是成员属性和成员方法(一般方法);
this对象后面跟上 () 调用的是本类中的对应参数的构造函数。
注意:用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。否则编译失败。
继承(面向对象特征之一)
好处:1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了另一个特征多态的前提。
父类的由来:其实是由多个类不断向上抽取共性内容而来的。
java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。
单继承:一个类只能有一个父类。
多继承:一个类可以有多个父类。
为什么不支持多继承呢?
因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。
但是java支持多重继承。A继承B B继承C C继承D。
多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。
所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。
抽象类的特点:
1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。2:抽象方法只定义方法声明,并不定义方法实现。
3:抽象类不可以被创建对象(实例化)。
4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
多态(面向对象特征之一):
函数本身就具备多态性,某一种事物有不同的具体的体现。
体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat();多态的好处:提高了程序的扩展性。
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态的前提:
1:必须要有关系,比如继承、或者实现。
2:通常会有覆盖操作。
多态的出现思想上也做着变化:以前是创建对象并指挥对象做事情。有了多态以后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或接口实现。
通过张老师的视频,有那么比较熟悉的面向对象的例子
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法
例子:
(1)人在黑板上画圆。
总的有三个对象:person,blackboard,circle
画圆需要圆心和半径。所以draw();方法是圆身上的。
人发出画圆的信号。黑板是载体。圆拥有画圆的方法。
(2)列车司机紧急刹车
列车司机发出信号刹车。列车自己提供刹车方法。因为只有列车知道怎么样刹车。
(3)售货员统计售货小票的金额
售货员只是得到了总金额。是小票自己提供的方法。
(4)你把门关上了。
人只是发出关门的信号。关门的动作是门自己提供的。
面向对象的面试题,用面向对象的方式设计如下情景:
两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子。
package ObjectOriented;
/*
* 石刀生成工厂
*/
public class KnifeFactory {
public StoneKnife createKnife(Stone first,Stone second){
return new StoneKnife();
}
}
package ObjectOriented;
/*
* 石刀类
*/
public class StoneKnife {
public Material cutTree(StoneKnife sk,Tree tree){
return new Material();
}
}
package ObjectOriented;
/*
* 椅子生成工厂
*/
public class ChairFactory {
public Chair makeChair(Material mt){
return new Chair();
}
}
.球从一根绳子的一端移动到了另一端。
package ObjectOriented;
public class Ball {
private Rope rope ;
private Point startPoint;
public Ball(Rope rope, Point startPoint) {
super();
this.rope = rope;
this.startPoint = startPoint;
}
public void move(Point startPoint){
startPoint = rope.nextPoint(startPoint);
System.out.println("小球移动到了"+startPoint+"处");
}
}
class Point{
}
package ObjectOriented;
//绳子
public class Rope {
private Point startPoint;
private Point endPoint;
public Rope(Point startPoint, Point endPoint) {
super();
this.startPoint = startPoint;
this.endPoint = endPoint;
}
public Point nextPoint(Point currentPoint){
if(currentPoint==endPoint){
return null;
}
return currentPoint;
}
}