黑马程序员——继承、抽象、接口、多态、内部类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

继承:

优点

1、提高代码复用性。

2.、继承让类与类之间产生关系,产生关系才有 了多态的特性。

注意:

千万不要为获取其他类功能简化代码而继承,必须类间有所属关系才能继承。

JavaH中只支持单继承,不支持多继承,但支持多层继承,是一个继承体系。

多继承容易带来安全隐患,当多个父类中定义了相同功能,但功能内容不同时,子类不确定运行那个:但Java保留了机制是另一种实现方式,多实现。

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

想使用体系,先查询父类的描述,因父类定义的是体系共性功能,了解共性功能,则可知道体系的基本功能,则可以基本使用这个体系了。具体调用时,要创建最子类对象。

原因:1.因父类可能不能创建对象。2.创建子类对象可以使用更多的功能。基本与特有的都可以使用。

总的来说,查阅父类功能创建子类对象。

例子



继承中的规则:

类中成员:1.变量、2.函数、3.构造函数

1、子父类变量同名,访问本类用this,访问父类用super。this及super用法基本一致。

2.、方法同名时,子类方法会覆盖父类方法,当子类继承父类,沿袭了父类的功能,到子类中,但子类虽然具备该功能但功能内容却和父类不一致,这时没必要定义新功能,使用覆盖,保留父类的功能定义,并重写功能内容。

3、子类与父类的构造函数,在对子类进行初始化时,父类构造函数也会执行,因为子类的构造函数默认第一行有一条隐式的super()语句。

覆盖注意:

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

2.静态只能覆盖静态

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

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

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

子类的实例化过程:

子类的所有构造函数默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式super(),当父类没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要访问的父类构造函数,当然子类构造函数也可用this语句来访问本类中构造函数,子类中至少有一个构造函数会访问父类中的构造函数。

final

特点

1.可以修饰类、函数、变量。

2.被final修饰的类不能被继承,为避免被继承,被子类腹泻功能。

3.被final修饰的方法 不能被复写

4.被final修饰的变量为常量只能赋值一次,即可修饰成员变量也可修饰布局变量。当描述事物时,一些数据出现值是固定的这时为增强阅读性,给这些值取个名字,便于阅读,这个值不需要改变。

5.内部类定义在类中的局部位置上时 ,只能访问该局部别final修饰的局部变量。

抽象类及抽象方法

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

抽象方法必须在抽象类中。

特点

1.抽象方法一定定义在抽象类中。

2.抽象方法及抽星类必须被abstract修饰

3.抽象类不能用new创建对象,因抽象方法无意义。

4.抽象类中的方法被使用,必须有子类复写需所有抽象方法,如果子类只覆盖部分抽象方法,该子类还是抽象类。

抽象类中可存在非抽象方法。和一般类没有太大的不同。该如何描述事物就如何描述事物,不过该事物有看不懂的东西。这些不确定部分,也是该事物功能。需明确出现,但无法定义主体通过抽象方法表示。

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

模板方法设计模式:

在定义功能时,功能一部分是确定的,一部分是不确定的,而确定部分使用不确定部分。则把不确定部分暴露出去,有子类完成。

例子一:



例子二:


接口:

初期理解:可以认为是一个特殊的抽象类。

当抽象类中的方法都是抽象的可用接口表示。

接口定义时,格式特点

1.接口常见定义:常量、抽象方法

2.接口中的成员都哟固定修饰符

常量:public static final

方法: public abstract

记住:接口中的成员都是public的

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

接口可以被类多实现,也是对多继承不支持的转换模式。Java支持多实现。

接口的特点:

1.接口是对外暴露的规则。

2.接口是程序的功能扩展。

3.接口可以用来多实现。

4.类与接口之间是多实现关系,而且类可以继承一个类的同时实现多个接口。

5.接口与接口之间可以有继承关系

多态:

某一事物多种表现形式。

1.多态的体现

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

2.多态的前提

必须是类与类之间的关系,要么继承要么实现。通常还有一个前提是存在覆盖

3.多态的好处

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

4.多态的弊端

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

如果想要调用特有方法时,操作如下:

强制将父类引用转成子类类型:向下转型(强制转换)

注意:

千万不要将父类对象转成子类类型。我们能转换的是父类引用指向子类对象时,可以提升,也可强转多态自始至终都是子类对象在做着变化。

5.多态的出现代码中特点:

在多态中成员函数的特点:在编译时期参阅引用型变量所属的类中是否有调用的方法。有,编译通过,没有,编译失败。

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

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

在多态中成员变量无论编译运行都参考左边。

在多态中静态成员函数特点无论运行编译都参考左边

接口型引用指向自己的子类对象。

例子



Object类:

类层次结构的根类。是所有对象的直接或间接父类。该类中定定义的肯定是所有对象都具备的功能。

Object类中已提供对对象是否相同的方法。

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

对于特有数据需要做

1.判断类型2.转换类型

内部类:

将一个类定义在另一个类里面。对里面那个类称为内部类(内置类)。

内部访问规则:

1.内部类可直接访问外部类中的成员,包括私有

2.外部类要访问内部类要建立内部类对象。

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

访问格式:

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

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

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

在外部其他类中如何直接访问静态内部类的非静态成员?


如何在外部其他类,如何直接访问静态内部类的静态成员?

outer.Inner.function();

注意:当内部中定义了静态成员该内部类必须是静态的,当外部类中静态方法访问内部类时,内部类也必须是静态的。

局部内部类不能被private和static修饰。

内部类定义在局部时:

1.不能被成员修饰符修饰。

2.可以直接访问外部类中成员,因为还持有外部类中的引用,但是不可以访问他所在的局部中变量,只能访问被final修饰的局部变量

例子:


匿名内部类:

1.其实就是内部类的简写格式

2.定义内部类的前提,内部类必须是继承一个类或者实现接口。

3.匿名内部类的格式: new 父类或接口()

4.其实匿名内部类就是一个匿名子类对象,而且这个对象可以理解为带内容的对象。

5.匿名内部类中定义的方法最好少于3个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值