Java基础——继承

来源:互联网 发布:mac准备安装时发生错误 编辑:程序博客网 时间:2024/05/24 05:32


继承:
特点:
1,提高了代码的复用性。
2,让类与类之间产生关系,是多态性的前提。


Java中的继承。
1,java只支持单继承,不支持多继承。为啥呢?
答案:因为继承了多个父类如果有相同方法时,子类对象不确定运行哪一个。
2,Java还支持多层继承。A-->B--->C  原来可以形成继承体系。
注解:父类的由来其实是由事物中的共性内容不断向上抽取而来的。
所以父类中定义的是该体系中的最基本,最共性功能。
继承出现后,代码上也有一些特点:

1,变量。
当子父类中定义了相同的名称的成员变量,
子类要使用父类中的同名变量时,需要使用关键字super来区分。
一般不会出现这种情况,因为父类中有了,子类不需要定义。
而且父类定义时,一般变量都私有化。

2,函数。
子类可以直接访问父类中非私有的成员函数。
  特殊情况
当子类中定义了与父类一模一样的方法时,会发生覆盖操作。大多指的是非静态方法。
最终会运行子类的方法,父类相当于被覆盖了。
函数的另一个特性:覆盖(重写,复写)。

覆盖很爽,但是有注意事项
1,子类覆盖父类时,必须权限要大于等于父类权限。
2,静态不能覆盖非静态。
3,构造函数。

构造函数可以本类进行对象初始化,也可以给子类对象进行初始化。
子类对象初始化过程:
子类中的所有构造方法都会访问父类中空参数的构造函数,
因为每一个构造函数的第一行,都有一句隐式的super语句。

为什么要有这条语句?
因为子类会获取到父类中的数据,必须要先明确父类对数据的初始化过程。
当父类中没有空参数构造函数时,子类构造函数必须通过super句来明确要访问的父类中指定的构造函数。
当子类构造函数也可以通过this语句访问本类中的构造函数。
但是子类中肯定,至少有一个构造函数会访问父类。

抽象类:其实就是在分析事物时,事物中的功能有些是不明确的内容的。这些不明确内容就是抽象的。
可以通过抽象函数来描述。
抽象函数一定要定义在抽象类中,因为,抽象函数所在类,也必须被抽象标识。

写法特点
1、抽象函数只对函数进行声明,没有函数主体。
2、抽象类和抽象函数都需要用abstract修饰。
3、抽象类不可以进行实例化。
4、想要使用抽象功能,必须通过子类覆盖了父类中所有的抽象方法后,才可以对子类实例化。

如果只覆盖了部分抽象方法,那么子类还是一个抽象类。
也可以理解为:抽象类是一个父类,是不断向上抽取而来的,
在抽取过程中,只抽取了方法声明,但没有抽取方法实现。
抽象类和一半类差不多。

区别
抽象类可以定义抽象方法。
抽象类不可以建立对象。
其实抽象类一样用于描述事物,既可以定义抽象方法,也可以定义非抽象方法。

接口
初期理解:接口看上去是一个特殊的抽象类。里面存的都是抽象方法。

特点:
格式
1、通过interface来定义。
2、接口中常见成员:常量,抽象方法。
而且这些成员都有固定的修饰符。
常量:public static final
方法:public abstract 
3、接口中的成员都是共有的。
4、一个类可以对接口进行多实现,也弥补了多继承带来的安全隐患,所以java对多继承进行了改良。
用多实现方法来体现多继承的特性。
5、一个类可以继承一个类的同时,实现多个接口。
6、接口与接口之间是继承关系,而且可以多继承。


应用特点
1、接口是对外暴露的规则。
2、接口是功能的扩展。
3、接口的出现降低了耦合性。


抽象类和接口异同
相同
1、都可以在内部定义抽象方法。
2、通常都在顶层。
3、都不可以实例化,都需要子类来实现。


不同点
1、抽象类中可以定义抽象方法和非抽象方法,
而接口中只能定义抽象方法。
2、接口的出现可以多实现。
抽象类只能单继承。
也就是说:接口的出现避免了单继承的局限性。
3、继承和实现的关系不一致。继承:is a,实现:like a 


如下代码:

<span style="font-family:Microsoft YaHei;">abstract class Fu{abstract int show();}class Zi extends Fu{int show1(){return 3;}}class  Fu{void method(){System.out.println("method run");}}class Zi extends Fu{</span>
<span style="font-family:Microsoft YaHei;">       //覆盖子类的方法void method(){System.out.println("method zi run");}}</span>


2 0
原创粉丝点击