----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
拾遗补录:
面向对象与面向过程:
(1)面向对象与面向过程的区别,以及有哪些编程语言为代表?
A、面向对象是以对象为基础,强调对象能完成什么功能(What);代表语言有JAVA、C++、Python、
B、面向过程是以函数为基础,强调函数怎么实现此功能(How);代表语言有C、
(2)面向对象的思想特点?
A、把复杂的事情简单化
B、更符合人类的思考习惯
C、让程序员从执行者转换为调用者
(3)如何理解面向对象?
A、面向对象是什么——面向对象是一种编程思想、它是基于面向过程而言。
B、面向对象与面向过程的区别——面向对象强调对象有什么功能(what) 、面向过程强调函数怎么完成功能(how)
C、面向对象的思想特点——能少就少、能懒就懒、能推就推
D、举例说明——
1、西游记—— 面向过程:孙悟空三打白骨精、面向对象:你是猴子请来的救兵吗?
2、项目 —— 面向过程:项目经理自己码代码、面向对象:交给程序员
3、对象—— 面向过程:自己洗衣做饭LOL、面向对象:找个对象嘛
4、旅游——面向过程:自己查攻略、订票……面向对象:找旅行社
5、修电脑——面向过程:自己动手…… 面向对象:找人修
--------------------------------------------------------------------------------------------------------------------
抽象类:
抽象类的特点:当多个类中出现相同功能但功能主体不同。这时可以进行向上抽取:只抽取功能定义,不抽取功能主体
1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰
2:抽象方法只定义方法声明,并不定义方法实现。抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类。
3:抽象类不可以被创建对象(实例化)。通过子类对象进行初始化。
4:子类继承抽象类并重写了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
抽象关键字abstract和哪些不可以共存?
final , private , static;(abstract可以描述类和方法,不可以描述变量)
在继承中,为什么有些时候选择父类是抽象类?
当我们强制要求子类必须完成某些功能的时候。
抽象类的成员特点:
1、成员变量:可以有成员变量,也可以有常量。
2、构造方法:有构造方法。用于子类访问父类数据前,对父类数据进行初始化。
3、成员方法:可以有抽象方法,也可以有非抽象方法。抽象方法是为了要求子类做某些事情;非抽象方法是为了提高代码复用性,被子类继承。
模板设计模式:就是利用抽象类
模板设计:新生入学手续办理
----------------------------------------------------------------------------------------------------------------------------------------------------------
接 口:
Interface-----一种特殊的抽象类。比抽象类更抽象。
接口中的成员都是固定的:public
接口的特点:
1、接口不能被实例化,只能有子类去实现implements
2、接口中的方法要么被子类重写,要么子类也是抽象的。
3、接口与接口之间是继承关系,接口可以是多继承。
接口的成员特点:
1、成员变量:只有常量,默认都有public static final修饰。
2、构造方法:不需要初始化,没有构造方法。
3、成员方法:只有抽象方法,默认都有public abstract修饰。
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。一个类在继承一个类的同时还能去实现接口。
小结及拓展:
接口的特点:1、对外暴露的规则 2、程序的功能扩展 3、降低耦合性 4、用来多实现。
拓展:
耦合指类与类的关系:关系越强,耦合越低。继承关系属于强耦合。
内聚:类自身完成功能的能力。
编程中要做到高内聚,低耦合。
抽象类和接口的区别:
1、成员特点:
抽象类:成员变量---可以是变量,也可以是常量。
构造方法---有构造方法。
成员方法---可以是抽象方法,也可以是非抽象方法。
接口:
成员变量---只能是常量,默认修饰符 public static final。
成员方法---只能是抽象方法,默认修饰符 public abstract。
2、关系特点:
类与类的关系:继承关系-----只能单继承,可以多层继承。
类与接口的关系:实现关系----可以单实现,也可以多实现,并且可以在继承一个类的同时实现多个接口。
接口与接口的关系:继承关系—可以单继承,也可以多继承。eg:接口A、B、C… A extends B,C,D…
3、设计理念的区别:
抽象类被继承,这个类中定义的是整个继承体现的共性内容。体现:is a。
接口被实现,这个接口中定义的是整个体现的扩展内容。体现:like a。
----------------------------------------------------------------------------------------------------------------------------------------------------------
内部类:
内部类:将一个类定义在另一个类的里面,对里面的那个类就称为内部类。
内部类位置:
成员位置定义-----成员内部类
局部位置定义-----局部内部类---方法中定义的类
工作面试题:局部内部类访问局部变量,该变量必须被final修饰。为什么?
局部变量会在方法调用完毕后,立马消失。而局部内部类中如果有地方使用着局部变量,当方法消失后,这个方法区中的内容还没有消失,也就是说这个变量还必须存在。所以为了延长局部变量的生命周期,就加final修饰。
内部类使用:
在测试类中直接使用成员内部类格式:
Outer.Inner oi = new Outer().new Inner();
内部类的两种常见修饰符:private(为安全)、static(为方便)。
如果内部类是静态的,调用格式:
Outer.Inner oi = new 外部类名.内部类名();
内部类和外部类之间的调用方式:
1、内部类调用外部类成员-------当成自己的成员来用,直接使用。
2、外部类调用内部类-------在自己某个方法中,创建一个内部类对象 Inner in = new Inner();
3、在测试类中直接调用内部类------Outer.Inner oi = new Outer().new Inner(); ---------等于外部类对象.内部类对象
静态内部类
1、内部类定义在成员位置上,static修饰,当内部类被static修饰后,只能访问外部类中的static成员,
2、外部类访问静态内部类:new 外部类().内部类().内部类方法()
3、当内部类中定义了static静态成员,该内部类也必须是static的
匿名内部类:没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用
前提:内部类必须继承一个类或者实现接口。
格式: (new 类名或者接口名() {重写类或者接口中的方法 也可以自己定义新的方法 });
内部类理解:是一个继承了类或者实现了接口的匿名的子类对象。
什么时候使用?一般来说,当接口或者抽象类中的方法在3个以下的时候,考虑用匿名内部类。在以后看到一个方法接收的形式参数是一个抽象类或者接口的时候,也可以考虑使用。