JAVASE之继承和抽象类

来源:互联网 发布:加强网络舆情监督工作 编辑:程序博客网 时间:2024/06/06 07:09

1.1 JAVA继承:

 

继承:多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了..

继承使用关键字extends实现.

格式:class 子类 extends 父类

继承的特点(单一继承和多层继承):

java.类只支持单继承,不允许多继承.也就是说一个类只能有一个直接父类

多个类可以直接继承一个父类

Java中多层继承是可以的.即一个类的父类可以再去继承另外的父类,例如c类继承自B,B类又可以去继承A,这时,C类可以称作A类的子类.

Java,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类.

 

继承中成员变量的特点:

子类只能获取到父类非私有成员

子父类中成员变量的名字不一样直接获取父类的成员变量

子父类中成员变量名字是一样的获取的是子类的成员变量

 

就近原则:

如果有局部变量,就使用局部变量

如果没有局部变量,有子类的成员变量就使用子类的成员变量

如果没有局部变量和子类的成员变量,有父类的成员变量就是用父类的成员变量.

 

Super:可以获取父类的成员变量和成员方法,用法和this是相似的.

方法重写(override)

方法的重写:在字符类当中,子类的方法和父类的完全一样.子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法

应用场景:当父类的方法不能完全满足子类使用的时候,既可以保留父类的功能(沿袭,传承),还可以有自己特有的功能.

注意事项:不可以重写父类私有的成员方法,压根就看不到父类的私有成员

子类重写父类方法,权限必须大于等于父类方法的权限

注解:@Override:方法重写,说明下面的方法是重写父类的写法.

特点:

子类中没有这个方法,调用父类的

子类中重写了这个方法,调用子类的

 

继承中构造方法的执行顺序:

Super(实参列表);语句  在子类的构造方法中使用,用来调用父类中的构造方法(具体哪一个由传递的参数决定),并且只能在构造方法第一行使用.

This(实参列表);语句 在类的构造方法中使用,用来调用本类中的其他构造方法(具体哪一个由传递的参数决定),并且只能在构造方法的第一行使用.

在子父类中,创建子类对象,调用子类的构造方法.在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造.则默认调用父类无参构造.

调用父类构造的原因:

因为需要给父类的成员变量初始化,肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码.

 

Thissuper关键字的区别:

This:当前对象的引用

调用子类的成员变量

调用子类的成员方法

在子类的构造方法第一行调用子类其他构造方法

Super:子类对象的父类引用:

调用父类的成员变量

调用父类的成员方法

在子类的构造方法第一行调用父类的构造方法

 

继承的优缺点:

: 提高了代码的复用性

提高了代码的可维护性

缺点: 类的耦合性增强了

开发的原则:高内聚低耦合

内聚:就是自己完成某件事情的能力

耦合:类与类的关系

 

1.2 抽象类

抽象类:有抽象方法的类必须是抽象类

抽象方法:不同类的方法是相似的,但是具体内容又不太一样,所以我们只能抽取他的声明.没有具体的方法体,没有具体方法体的方法就是抽象方法

abstract:关键字,修饰类就是抽象类,修饰方法就是抽象方法

NOTE:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类.

 

抽象类的特点:

抽象方法只能在抽象类里面

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

抽象类不能创建对象(不能实例化)

抽象类中可以有非抽象的方法.

抽象类和类的关系也是继承

一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类.

 

抽象类成员的特点:

成员变量: 可以有成员变量可以有常量

成员方法: 可以有抽象方法可以有非抽象方法

构造方法:可以有构造方法,需要对抽象类的成员变量进行初始化

final: 修饰类,成员变量,成员方法

 

NOTES:

Abstractprivate组合使用时,

私有的方法子类是无法继承别的,也不存在覆盖,abstractprivate一起使用修饰方法,abstract既要去实现这个方法,private修饰子类根本无法得到父类这个方法.互相矛盾.so.xx

Abstractfinal

抽象类不能和final共存,因为抽象类自身无法创建对象,我们需要通过子类创建对象,一旦抽象类使用final关键字,那么抽象类就没有子类了.(final修饰的类是最终类,不可以被继承,就没有子类这种说法)

抽象方法不能和final共存,因为抽象方法后期需要被子类重写,一旦加final无法重写.

Abstractstatic

抽象方法不能和static关键字共存,因为一旦加static我们就可以通过类名直接访问抽象方法,由于抽象方法没有方法体,没有任何意义,也不允许这样做.

So,abstractprivate.final或者static搭配,是没有任何意义的

 

抽象类中可以不定义抽象方法

目的:不让该类创建对象,方法可以直接让子类去使用

抽象类有构造函数:

抽象类的构造函数,是由子类的super语句来调用的,用于给抽象类中的成员初始化.

 

 

原创粉丝点击