黑马程序员Java笔记——抽象类、接口、内部类(拾遗补录)

----------- android培训java培训、java学习型技术博客、期待与您交流! ---------

拾遗补录:

面向对象与面向过程:

1)面向对象与面向过程的区别,以及有哪些编程语言为代表?

A面向对象是以对象为基础,强调对象能完成什么功能(What);代表语言有JAVAC++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 , staticabstract可以描述类和方法,不可以描述变量)  

在继承中,为什么有些时候选择父类是抽象类?

当我们强制要求子类必须完成某些功能的时候。

 

抽象类的成员特点:

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:接口ABC   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个以下的时候,考虑用匿名内部类。在以后看到一个方法接收的形式参数是一个抽象类或者接口的时候,也可以考虑使用。


你可能感兴趣的:(Java笔记)