黑马程序员---面向对象2

来源:互联网 发布:mysql 嵌套select语句 编辑:程序博客网 时间:2024/06/04 18:29

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

1、继承

子类名  extends  父类名

继承提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态的特性。

注意:必须是类与类之间有所属关系才可以继承。

java语言中:java只支持单继承,不支持多继承。但java支持多层继承,也就是一个继承体系。

因为多继承容易带来安全隐患:当多个父类中定义了相同功能时,子类不能确定执行哪一个。

如何使用一个继承体系中的功能呢?

想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。

查阅父类功能,创建子类对象使用功能。

聚集:聚合,组合。

super关键字:代表父类对象的引用。

this关键字:代表本类对象的引用。

函数的另一个特性:覆盖,也称为重写。

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

静态只能覆盖静态。

重载:只看同名函数的参数列表。

重写:子父类方法要一模一样。

父类中的构造函数不能被子类所覆盖。(类名都不一样。)

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

super():会访问父类中空参数的构造函数。

为什么子类一定要访问父类中的构造函数?

因为父类中的数据子类都可以直接获得,所有子类对象在建立时,需要先查看父类是如何初始化这些数据的。

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

当然,子类的构造函数的第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少有一个构造函数会访问父类中的构造函数。

2、抽象

当多个类中出现相同功能,但功能主体不同,这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。

抽象:看不懂。

特点:

a 抽象方法一定在抽象类中。

b 抽象方法和抽象类都必须被abstract关键字修饰。

c 抽象类不可以用new创建对象。因为调用抽象方法没意义。

d 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。

如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

抽象类比一般类多了抽象函数,在类中可以定义抽象方法。

抽象类不可以实例化。

特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

3、模板方法设计模式

什么是模板方法呢?

在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分时,那么将不确定的功能提供出去,给子类进行确定。

4、接口

接口:初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。

关键字:interface

接口定义时,格式特点:

a 接口常见定义:常量,抽象方法。

b 接口中的成员都有固定修饰符。

   常量:public static final

   方法:public abstract

接口中的成员都是public的。

接口:不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。

5、多态

多态:事物存在的多种体现形态。

向上转型:类型提升。

向下转型:强制将父类的引用,转成子类类型。(前提这个父类本身是向上转型得来的。)

我们向下转换的是父类引用指向了自己的子类对象时,该引用才可以向下转型。

多态自始至终都是子类对象在做变化。

关键字 instanceof  判断引用类型相同否。

在多态中成员函数的特点:

       在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。

       在运行时期:参阅对象所属的类中是否有调用的方法。

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

在多态中,成员变量的调用,无论编译还是运行都看左边(父类)。

在多态中,静态成员函数的特点:无论编译还是运行都参考左边。

a、多态的体现

       父类的引用指向了自己的子类对象。

       父类的引用也可以接收自己的子类对象。

b、多态的前提

       必须是类与类之间的关系,要么继承,要么实现。

       通常还有一个前提,存在覆盖。

c、多态的好处

       多态的出现提高了代码的扩展性。

d、多态的弊端

       提高了扩展性,但是只能使用父类的引用访问父类中的成员。

数据库的操作?

1、连接数据库。JDBC   Hibernate

2、操作数据库。增,删,改,查

3、关闭数据库连接。

6、object类----equals()

object类是所有类的父类。

Object类中已经提供了对对象是否相同的比较方式。

如果自定义类中也有比较相同的功能,那么没有必要重新定义。只要沿袭父类中的功能,建立自己特有比较内容即可。这就是覆盖。

7、内部类

内部类的访问规则:

a、内部类可以直接访问外部类中的成员,包括私有的成员。

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

b、外部类要访问内部类,必须建立内部类的对象。

访问格式:

当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。

可以直接建立内部类对象。

外部类名.内部类名  变量名 = 外部类对象 . 内部类对象;

当内部类在成员位置上,就可以被成员修饰符所修饰。

       比如,private:将内部类在外部类中进行封装。

   static:内部类就具备static的特性。

当内部类中定义了静态成员,该内部类必须是静态的。

当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物可以使用外部事物的内容。

内部类定义在局部时:不可以被成员修饰符修饰;可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问final修饰的局部变量。


匿名内部类:

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

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

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

d、其实匿名内部类就是一个匿名子类对象。

e、匿名内部类只能调用一次方法。


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

原创粉丝点击