您的位置:首页 > 职场人生

AdaultBird--我的黑马程序员之路!Chapter12---面向对象的三大特性!

2015-09-12 13:31 483 查看
一、封装

1、封装的概念

Encapsulation隐藏对象的属性和方法的实现细节,仅对外提供公共的访问方式!

2、好处:

(1)、将变化隔离(2)、便于使用(3)、提高重用性(4)、提高安全性

3 、封装原则:将不需要对外提供的内容都隐藏起来,把属性隐藏,提供公共访问方式

4、private:私有,权限修饰符,用于修饰类中的成员(成员变量和成员函数),私有只在本类中有效

二、继承

1、继承的概念

从已有的类中派生出新的类,新的类可以 吸收已有类的属性和行为,并能扩展新的功能。

2、继承的作用

(1)提高了代码的复用性

(2)让类与类之间产生了关系,有了这个关系才有了多态的特性

3、继承的注意事项

(1)千万不能为了获取其他类的功能,简化代码而继承。必须是类与类之间存在所属关系才可以继承

(2)java只支持单继承,不支持多继承,但支持多层继承,因为存在安全隐患

(3)java提供了实现多继承的另外一种方式,多实现

4、子父类中的函数

(1)当子类存在和父类一模一样的函数时,会运行子类函数的内容,叫做方法的重写

(2)子类重写父类函数需要注意两点:

必须保证子类权限大于父类,才可以覆盖,否则编译失败

静态只能覆盖静态

5、子父类中的构造函数

(1)、在子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的super()

(2)、为什么子类一定要访问父类中的构造函数

因为父类中的数据,子类可以直接获取,所以在子类建立对象时,需要先查看父类是如何对这些数据进行初始化的,所以在初始化时,一定要先访问父类的构造函数

如果要访问父类中指定的构造函数,可以通过手动定义super语句方式来指定

注意:super语句一定在子类构造函数的第一行

(3)子类的实例化过程

子类的所有构造函数都默认访问父类中的空参数构造函数,因为子类的每一个构造函数默认第一行都有一个隐式super()语句

当父类总没有空参数构造函数时,子类必须手动通过super语句形式来指定要访问的父类构造函数

当然:子类中的构造函数第一行也可以手动指定this语句来访问本类中的其他构造函数

子类中至少有一个构造函数会访问父类中的构造函数

6、final关键字

final可以修饰 类 方法 变量

被final修饰的类不可以被继承

被final修饰的方法不可以被覆盖

被final修饰的变量是一个常量,只能被赋值一次

内部类只能访问被final修饰的局部变量

常量的书写格式 final value =VALUE_OF_X;

7、抽象类

1、概念

当多个类存在相同功能,但功能主体不同,此时可以进行向上抽取,只抽取定义,而不抽取功能主体。

2、特点

(1)抽象方法一定在抽象类中

(2)抽象方法和抽象类必须被 abstract修饰

(3)抽象类不可以new对象,因为调用抽象方法没有意义

(4)抽象类中的方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只复写了部分抽象方法,那么该子类也是一个抽象类

8、模板设计模式

概念:当定义一个功能时,功能的一部分是确定的,但有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类来完成。

9、接口(Interface)

接口是一个特殊的抽象类,该类中,可以定义功能,但没有任何具体的实现方式,只作为入口,被实现它的子类去完成,他是java中多继承的另外一种体现形式

接口中的成员修饰符是固定的:成员变量 public static final 成员函数public abstract

接口的特点:

(1)接口是对外暴露的规则

(2)接口是程序功能的扩展

(3)接口可以用来多实现

(4)类与接口之间是实现关系,类在继承一个类的同时,可以多实现

(5)接口与接口之间可以有击沉关系

三、多态

1、多态的概念:某一类事物的多种存在形态

2、多态的体现

父类引用指向子类对象

3、多态的前提

类与类之间必须要有关系,要么继承,要么实现

4、多态的弊端

只能父类的引用,访问父类中的成员

5、多态的好处

多态的出现大大提高了程序的扩展性

6、多态中成员函数的特点

(1)在编译时期,参阅引用型变量是否有调用的方法,如果有编译通过,没有,编译失败

(2)在运行时期,参阅所属的对象的类中是否有调用的方法

总结:成员函数在多态调用时,编译看左边,运行看右边

7、在多态中成员变量的特点

无论编译或运行,都参考左边(引用型变量所属的类)

8、多态中静态成员函数的特点

无论编译或运行,都看左边

9、Object类及equals 和toString方法

Object类时所有类的直接或间接父类,该类中定义了所有类的对象都具备的功能

如果需要比较两个对象是否相等,需要复写Object类中的equals方法,参数(Object,obj)必须向下转型

如果要自定义被打印的内容,则需要覆盖toString方法,否则非字符串类型对象将返回被打印内容的hashCode值

10、内部类

(1)概念:将一个类定义在另一个类的内部,里面那个类就称之为内部类

(2)内部类访问的特点

内部类可以直接访问外部类的成员,包括静态成员,之所以可以直接访问,是因为内部类中持有了一个外部类的引用格式:外部类名.this

外部类要访问内部类的成员必须建立内部类对象

(3)内部类访问外部类的格式

当内部类定在在外部类成员位置上,而且非私有,可以在外部其他类中,直接建立内部类对象。格式

外部类名.内部类名 对象名=外部类对象.内部类对象(new Outer().new Inner())

11、匿名内部类

1、匿名内部类其实就是内部类的简写格式

2、定义匿名内部类的前提,必须是继承了一个类或者实现了接口

3、匿名内部类的格式: new 父类或者接口(){子类内容}

4、其实匿名内部类就是个匿名子类对象,而且是带有内容的对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: