黑马程序员——Java继承、多态、接口

------- android培训java培训、期待与您交流! ----------
一、继承

把多个类中相同的内容给提取出来定义到一个类中。多个类可以称为子类,单独的这个类称为父类或者超类。通过extends关键字让类与类之间产生继承关系。

格式:

class Fu{}

class Zi extends Fu{}


好处:

A:提高了代码的复用性。

B:提高了代码的维护性。

C:让类与类之间产生了关系,是多态的前提。


弊端:

类与类之间产生了关系,其实也是继承的弊端,因为类的耦合性增强了。而开发的原则是低耦合,高内聚

耦合:类与类的关系

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

特点:

java只支持单继承,支持多继承。但是保留了这种多继承机制,进行改良,就是多层继承。

如A继承B  B继承C  C继承D。这就有了继承体系,体系中的顶层父类是通过不断向上抽取而来的。

它里面定义的该体系最基本最共性内容的功能。

对于一个继承体系的使用,就是查阅顶层父类中的内容,创建最底层子类的对象。 

注意事项:

A:子类只能继承父类所有非私有的成员(成员方法和成员变量)

B: 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

C:不能为了部分功能而去继承,必须是"is a"的关系。如苹果--水果。


二、super关键字&方法重写

子父类出现后,类成员的特点:
类中成员:
1:变量。

如果子类中出现了非私有的同名成员变量时,

子类要访问本类中的变量,用this

子类要访问父类中的同名变量,用super。


super 的使用和this的使用几乎一致。

this 代表的是本类对象的引用。

super代表的是子类所属的父类中的内存空间引用。


2:子父类中函数。

当子类对象调用和父类一模一样的函数时,会运行子类函数的内容。如同父类的函数被覆盖一样。

这种情况是函数的另一个特性:重写(覆盖)。

当子类继承了父类,沿袭了父类的功能,到子类中,但子类虽具备该功能,但是功能的内容却和父类不一致

这时,没有必要定义新功能,而是使用覆盖特性,保留父类的概念定义,并重写功能内容。

注意事项:

1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,并重写功能。

2.静态只能覆盖静态。

3.父类中的私有方法不可以被覆盖


重载与重写

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

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


3:子父类中的构造函数。

在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认

第一行第一条隐式的语句super();

super():会访问父类中空参数的构造函数,而且子类中所以的构造函数默认第一行都是super()。

子类一定要访问父类中的构造函数。因为父类中的数据子类可以直接获取,所以子类对象在建立时,

需要先查看父类是如何对这些数据进行初始化的。如果要访问父类中的指定的构造函数,可以通过

手动定义super语句的方式来指定。

4:子类的实例化

子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。因为子类继承父类,

会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。


注意事项:

super语句一定定义在子类构造函数的第一行。

因为super()或者this()都是调用构造函数,构造函数用于初始化,所以初始化的动作要先完成。

一个构造方法中super或this只能有一个。

结论:

A:子类的所有的构造函数,默认都会访问父类中空参数的构造函数。

因为子类的每一个构造函数的第一行都有一句隐式super();

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

C:如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问

父类中的构造函数。


三、final关键字

1:是最终的意思,可以修饰类,方法,变量。
2:特点

A:它修饰的类,不能被继承。

B:它修饰的方法,不能被重写。

C:它修饰的变量,是一个常量,只能被赋值一次。

3:写作规范

常量单词所有字母都大写,多个单词,中间用_连接。

4:final修饰局部变量的问题
基本类型:基本类型的值不能发生改变。

引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。

四、多态

同一个对象在不同时刻体现出来的不同状态。多态性简单的说就是一个对象对应着不同的类型。
1:多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。

2:多态的分类:
a:具体类多态
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象类多态
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
c:接口多态
interface Fu {}
class Zi implements Fu {}

Fu f = new Zi();


3:多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法

编译看左边,运行看右边因为成员方法有重写。

D:静态方法
编译看左边,运行看左边 。因为静态方法,其实不所属于对象,而是所属于该方法所在的类。


4:多态的好处:

A:提高代码的维护性(继承体现)

B:提高代码的扩展性(多态体现)


5:多态的弊端:
父不能使用子的特有功能。 子可以当作父使用,父不能当作子使用。


6:多态中的转型

A:向上转型——从子到父

B:向下转型——从父到子

对于转型,自始至终都是子类对象在做类型的变化


7:instanceof

如果想用子类对象的特有方法,需要进行健壮性判断,判断对象是否实现了指定的借口

或继承了指定的类。

格式

对象    instanceof    类型。判断一个对抓是否所属于指定的类型

如 Student    instanceof    Person = true;//Student类继承了Person类。

五、抽象类

Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,

包含抽象方法的类就是抽象类。


1:抽象类的特点

A:抽象类和抽象方法必须用关键字abstract修饰。

B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类

C:抽象类不能实例化。

D:抽象类的子类

a:可以是一个抽象类。

b:可以是一个具体类。这个类必须重写抽象类中的所有抽象方法,才可以实例化。

E:抽象类不可以与private, static, final共存。


2:抽象类的成员特点:

A:成员变量

有变量,有常量。

B:构造方法

有构造方法,用于给子类对象进行初始化。

C:成员方法

有抽象,有非抽象。


3:抽象类与一般类的区别

相同点:

抽象类和一般类都是用来描述事物的,都在内部定义了成员

不同点:

A:一般类有足够的信息描述事物

抽象类描述事物的信息有可能不足

B:一般类中不能定义抽象方法,只能定义非抽象方法

抽象类中可定义抽象方法,同时也可以定义非抽象方法

C:一般类可以被实例化

抽象类不可以被实例化

六、接口

当一个抽象类的方法都是抽象的时候,这时可以将该抽象类用另一个形式定义和表示,就是接口。

接口是对外暴露的规则,是程序的功能扩展。

接口的出现避免了单继承的局限性,也降低了耦合性。

1:接口的特点:
A:接口用关键字interface修饰
格式:interface 接口名 {}
B:类实现接口用implements修饰
格式:class 类名 implements 接口名 {}
C:接口不能实例化
D:接口的实现类
a:可以是一个抽象类。

b:可以是一个具体类,这个类必须重写接口中的所有抽象方法。


2:接口的成员特点:
A:成员变量
只能是常量
默认修饰符:public static final
B:构造方法
没有构造方法
C:成员方法
只能是抽象的

默认修饰符:public abstract


3:类与类,类与接口,接口与接口
A:类与类
继承关系,只能单继承,可以多层继承。
B:类与接口
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
C:接口与接口

继承关系,可以单继承,也可以多继承。


4:抽象类与接口的区别

A:抽象类需要被继承,而且只能单继承。

接口需要被实现,而且可以多实现。

B:抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。

接口中只能定义抽象方法,必须由子类去实现。

C:抽象类的继承,是is a 关系,定义该体系的基本共性内容。

接口的实现是like a关系。

D:抽象类的成员修饰符可以自定义。

接口中的成员修饰符是固定的,全都是public的。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值